假设我有以下数组:
N = 8
M = 4
a = np.zeros(M)
b = np.random.randint(M, size=N) # contains indices for a
c = np.random.rand(N) # contains random values
我想根据c
中提供的索引对b
的值求和,并将它们存储在a
中。为此编写一个循环是微不足道的:
for i, v in enumerate(b):
a[v] += c[i]
由于N
在我的实际问题中可能会变得很大,我想避免使用python循环,但我无法弄清楚如何将它写成numpy语句。任何人都可以帮助我吗?
好的,这里有一些示例值:
In [27]: b
Out[27]: array([0, 1, 2, 0, 2, 3, 1, 1])
In [28]: c
Out[28]:
array([ 0.15517108, 0.84717734, 0.86019899, 0.62413489, 0.24357903,
0.86015187, 0.85813481, 0.7071174 ])
In [30]: a
Out[30]: array([ 0.77930596, 2.41242955, 1.10377802, 0.86015187])
答案 0 :(得分:3)
import numpy as np
N = 8
M = 4
b = np.array([0, 1, 2, 0, 2, 3, 1, 1])
c = np.array([ 0.15517108, 0.84717734, 0.86019899, 0.62413489, 0.24357903, 0.86015187, 0.85813481, 0.7071174 ])
a = ((np.mgrid[:M,:N] == b)[0] * c).sum(axis=1)
返回
array([ 0.77930597, 2.41242955, 1.10377802, 0.86015187])