Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据索引数组求和值_Python_Arrays_Numpy - Fatal编程技术网

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