给定指数的numpy数组

时间:2016-10-18 09:24:40

标签: numpy vectorization

我想添加一个向量的值:

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype='d')

到另一个向量的值:

c = np.array([10, 10, 10], dtype='d')

在另一个数组给出的位置(大小相同a,值为0 <= b[i] < len(c)

b = np.array([2, 0, 1, 0, 2, 0, 1, 1, 0, 2], dtype='int32')

用伪代码写这个很简单:

for I in range(b.shape[0]):
    J = b[I]
    c[J] += a[I]

像这样的东西,但是矢量化(c的长度在实际情况下是几百个。)

c[0] += np.sum(a[b==0]) # 27 (10 + 1 + 3 + 5 + 8)
c[1] += np.sum(a[b==1]) # 25 (10 + 2 + 6 + 7)
c[2] += np.sum(a[b==2]) # 23 (10 + 0 + 4 + 9)

我最初的猜测是:

c[b] += a

但只有a的最后一个值相加。

1 个答案:

答案 0 :(得分:2)

您可以使用np.bincount获取基于ID的加权汇总,然后使用c添加,就像这样 -

np.bincount(b,a) + c