使用数组作为索引增加numpy数组元素

时间:2015-12-03 14:57:29

标签: python arrays numpy

我正在尝试有效地更新numpy数组A的一些元素,使用另一个数组b来指示要更新的A元素的索引。但是b可以包含被忽略的重复项,而我希望将其考虑在内。我想避免循环b。为了说明它:

>>> A = np.arange(10).reshape(2,5)
>>> A[0, np.array([1,1,1,2])] += 1
>>> A
array([[0, 2, 3, 3, 4],
       [5, 6, 7, 8, 9]])

虽然我希望输出为:

array([[0, 3, 3, 3, 4],
       [5, 6, 7, 8, 9]])

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

要正确处理重复索引,您需要使用np.add.at代替+=。因此,要更新A的第一行,最简单的方法可能是执行以下操作:

>>> np.add.at(A[0], [1,1,1,2], 1)
>>> A
array([[0, 4, 3, 3, 4],
       [5, 6, 7, 8, 9]])

可以找到ufunc.at方法的文档here

答案 1 :(得分:0)

一种方法是使用numpy.histogram查找每个索引的值,然后将结果添加到A

A[0, :] += np.histogram(np.array([1,1,1,2]), bins=np.arange(A.shape[1]+1))[0]