繁体   English   中英

索引numpy数组的总和

[英]Sum of indexed numpy arrays

假设我有一个索引数组:

I=[0 1 2 3 0 3]

和值数组:

W=[w0, w1, w2, w3]

如何使用如下生成的矢量化numpy表达式创建数组X

X = np.zeros(I.max() + 1)
for i in range(len(I)):
   X[I[i]] += W[I[i]]

在上面的示例中, X=[w0+w0, w1, w2, w3+w3]

从可复制对象开始

>>> I = np.r_[0, 1, 2, 3, 0, 3]
>>> W = np.r_[60, 50, 40, 30, 20, 10]
>>> M = W[I]

然后注意一个

>>> W[I]
array([60, 50, 40, 30, 60, 30])
>>> W[W[I]==W]
array([60, 50, 40, 30])
>>> np.unique(W[I], return_counts=True)[1]
array([2, 1, 1, 2])

最后,该怎么办

>>> W[M==W]*np.unique(M, return_counts=True)[1] #  X
array([120, 50, 40, 60])

让我们(几乎)使用字符串

>>> W = np.array(['w0', 'w1', 'w2', 'w3', 'w4', 'w5'])
>>> M = W[I]
>>> M
array(['w0', 'w1', 'w2', 'w3', 'w0', 'w3'], dtype='|S2')
>>> W[M==W]
array(['w0', 'w1', 'w2', 'w3'], dtype='|S2')
>>> np.unique(W[I], return_counts=True)[1]
array([2, 1, 1, 2])

导致精神上的考虑

>>> [2*'w0', 'w1', 'w2', 2*'w3']   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM