Python 根据索引数组求和值
我有两个维度相同的数组:Python 根据索引数组求和值,python,arrays,numpy,Python,Arrays,Numpy,我有两个维度相同的数组: a = np.array([ 1, 1, 2, 0, 0, 1]) b = np.array([50, 51, 6, 10, 3, 2]) 我想根据a中的索引对b的元素求和 我想要的矩阵的ith元素将是所有值的总和b[j],这样a[j]==i 所以结果应该是一个三维数组,[10+3,50+51+2,6] 有什么好办法吗?我有一些非常大的数组,我需要在多个维度上像这样求和,因此执行显式循环并不方便。如果您不使用numpy,可以使用以下简单的方法: res = [0]
a = np.array([ 1, 1, 2, 0, 0, 1])
b = np.array([50, 51, 6, 10, 3, 2])
我想根据a
中的索引对b
的元素求和
我想要的矩阵的i
th元素将是所有值的总和b[j]
,这样a[j]==i
所以结果应该是一个三维数组,[10+3,50+51+2,6]
有什么好办法吗?我有一些非常大的数组,我需要在多个维度上像这样求和,因此执行显式循环并不方便。如果您不使用numpy,可以使用以下简单的方法:
res = [0]*len(set(a))
for i, v in enumerate(b):
res[a[i]] += v
假设a
中的索引始终是基于0的连续序列。有一个权重
参数,它正好满足您的需要:
In [36]: np.bincount(a, weights=b)
Out[36]: array([ 13., 103., 6.])
你能解释一下程序吗?三维空间?也许有点不清楚?@Anmol_uppal我相信另一种说法是OP希望将
b
中的元素分组,使用它们在a
中的位置对应元素作为唯一标识符,然后计算每个唯一标识符在b
中的元素之和。是的。我添加了一个澄清的句子。@Bill查看@njzk2的答案-它本身不是一个numpy
解决方案,但似乎很容易用一个接受a
和b
作为参数的函数来概括。我认为使用np(numpy)询问这个问题的意义这是为了避免Python在数组上迭代,并使用Numpy向量函数快速完成这项工作。每当您迭代使用Numpy数组时,您可能会受到巨大的性能损失。@JimDennis:我经常尝试建议一种替代Numpy函数的方法,以防有人不使用它。(但我同意你的看法,当使用numpy时,请使用numpy)谢谢,这正是我想要的。此外,在b
维度高于a的情况下,还可以使用apply_沿_轴
和bincount
。