2016-09-27 41 views
-4

考慮我有這樣兩個陣列求和數組元素(其中之一是一個列表,實際上)根據一個標誌矢量

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

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

欲使用標誌中對應的值作爲關鍵字在A中求和值。結果所包含的相應基團的總和爲每個值在A.

所得陣列應該是

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

,因爲例如,這些元件A11(0),A12( 1)和a21(3)在標誌數組中具有鍵值(55)的相同位置。任何人都有一個關於如何使用python的想法? PS:我編輯了這個問題,試圖讓其他用戶可能會遇到同樣問題的問題更加清楚。

+2

什麼你嘗試了嗎? – C8H10N4O2

+1

你的意思是'A [flag == 55] .sum()'? – mgilson

+0

你能解釋一下什麼樣的邏輯你試圖實現...一個標誌55將總結(0 + 1 + 3)和一個標誌33總結(5 + 7 + 8)。我不明白你的意思 – BPL

回答

0

這裏是一個可能有效的解決方案:

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) 

這給下一輸出:

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

謝謝@BPL爲你解決。這對我現在正在工作的真實案例非常有幫助。在我的真實情況下,我正在處理3D數組。 A的所有元素都是其他陣列(實際上是一個譜)。 – David