3

次の配列があるとします。

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-statementとして記述する方法がわかりません。誰でも私を助けることができますか?

わかりました、ここにいくつかの例の値があります:

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])
4

1 に答える 1

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])
于 2012-07-03T12:33:36.967 に答える