根据标志向量求和数组元素

时间:2016-09-27 18:27:44

标签: python

考虑我有这两个数组(事实上其中一个是列表)

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

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

我想使用flag中的相应值作为键来对A中的值求和。结果应包含A中每个值的相应组的总和。

结果数组应为

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

例如,因为元素a11(0),a12(1)和a21(3)在标志数组中具有相同的键值(55)的位置。任何人都知道如何使用python?

PS:我已经编辑过这个问题,试图让其他可能遇到同样问题的用户更清楚。

1 个答案:

答案 0 :(得分: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]]