简而言之,我想要索引矩阵并添加到每一行。
在这个例子中,第一行(由0索引)应该加上[1,1,1]
。然后第二行(由1索引)应该加上[2, 2, 2]
。最后第一行(由第三个0索引)应该加上[3, 3, 3]
。
>>> a = np.array([np.array([1,2,3]), np.array([4,5,6])])
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> a[np.array([0,1,0]), :] += np.array([np.array([1,1,1]), np.array([2,2,2]), np.array([3,3,3])])
希望达成的目标:
>>> a
array([[5, 6, 7],
[6, 7, 8]])
实际的:
>>> a
array([[4, 5, 6],
[6, 7, 8]])
编辑2:
根据下面的评论,解决方案运行缓慢。在我只是添加0来测试速度的代码段中:
print y.shape
print dW.shape
np.add.at(dW, (y, slice(None)), 0)
输出:
(49000,)
(10, 3073)
没有np.add.at
这一行,剩余的代码只需要大约1秒钟。如果加上np.add.at
,则需要约21秒钟。
y.npy
dW.npy