假设我有索引的数组:萨姆索引numpy的阵列
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]
假设我有索引的数组:萨姆索引numpy的阵列
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']
是'I'排序? – Psidom
@Psidom这不是,但排序并不困难,结果不会改变;你知道用“I”排序的解决方案吗? – DikobrAz
你能用更新的'I'更新你的结果吗?我不知道你现在想做什么。 – Psidom