2016-09-27 4 views
-4

Betrachten Ich habe diese beiden Arrays (einer von ihnen ist eine Liste, in der Tat)Arrayelemente Summieren gemäß einem Flag-Vektor

A = array([[0, 1, 2],[3, 4, 5],[6, 7, 8]])

und

flag = [[55, 55, 00], [55, 00, 33], [0, 33, 33]]

Ich möchte Summenwerte in A mit den entsprechenden Werten in Flag als Schlüssel. Das Ergebnis sollte die Summen der entsprechenden Gruppen für jeden der Werte in A enthalten

Das resultierende Array

B = [[4, 4, 12], [4, 12, 20], [12, 20, 20]]

da beispielsweise sein sollte, wobei die Elemente a11 (0), a12 (1) und a21 (3) haben die gleiche Position des Schlüsselwerts (55) in dem Flag-Array. Jeder hat eine Idee, wie es mit Python geht?

PS: Ich habe die Frage bearbeitet, um es für andere Benutzer, die das gleiche Problem haben, klarer zu machen.

+2

was haben Sie versucht schon? – C8H10N4O2

+1

meinst du 'A [flag == 55] .sum()'? – mgilson

+0

Könntest du ein bisschen besser erklären, welche Art von Logik du zu implementieren versuchst ... eine Flagge 55 würde summieren (0 + 1 + 3) und eine Flagge 33 würde summieren (5 + 7 + 8). Ich verstehe deine Bedeutung nicht – BPL

Antwort

0

Hier ist eine mögliche Arbeitslösung:

from numpy import array 
from collections import defaultdict 

A = [[0, 1, 2], [3, 4, 5], [6, 7, 8]] 
flag = [[55, 55, 00], [55, 00, 33], [0, 33, 33]] 

keys = defaultdict(int) 

for i, f in enumerate(flag): 
    for j, v in enumerate(f): 
     keys[v] += A[i][j] 

B = [[keys[v] for j, v in enumerate(f)] for i, f in enumerate(flag)] 
print(B) 

, die die nächste Ausgabe gibt:

[[4, 4, 12], [4, 12, 20], [12, 20, 20]] 
+0

Vielen Dank @BPL für Ihre Lösung. Es wird sehr hilfreich sein für den wirklichen Fall, in dem ich gerade arbeite. In meinem Fall arbeite ich mit 3D-Arrays. Alle Elemente von A sind andere Arrays (tatsächlich ein Spektrum). – David

Verwandte Themen