Python 当索引重叠时,numpy高级索引就地增量的语义是什么?
我想使用高级索引增加numpy数组,例如Python 当索引重叠时,numpy高级索引就地增量的语义是什么?,python,numpy,Python,Numpy,我想使用高级索引增加numpy数组,例如 import numpy x = numpy.array([0,0]) indices = numpy.array([1,1]) x[indices] += [1,2] print x #prints [0 2] 我会预料到,结果是[03],因为1和2都应该添加到x的第二个零,但显然numpy只添加与特定索引匹配的最后一个元素。 这是我可以信赖的一般行为,还是这种未定义的行为,可能会随着numpy的不同版本而改变 此外,是否有一种(简单的)方法让num
import numpy
x = numpy.array([0,0])
indices = numpy.array([1,1])
x[indices] += [1,2]
print x #prints [0 2]
我会预料到,结果是[03],因为1和2都应该添加到x的第二个零,但显然numpy只添加与特定索引匹配的最后一个元素。
这是我可以信赖的一般行为,还是这种未定义的行为,可能会随着numpy的不同版本而改变
此外,是否有一种(简单的)方法让numpy添加与索引匹配的所有元素,而不仅仅是最后一个元素?来自numpy:
对于高级任务,通常不保证迭代顺序。这意味着,如果一个元素设置多次,则无法预测最终结果
您可以使用np.add.at获得所需的行为:
有关numpy.add中内置函数的帮助:
numpy.ufunc实例的numpy.add.at=at(…)方法
at(a,指数,b=无)
>>> b = np.ones(2, int)
>>> a = np.zeros(2, int)
>>> c = np.arange(2,4)
>>> np.add.at(a, b, c)
>>> a
array([0, 5])
你可以在那里使用
np.add.at
。我甚至不知道在对丢弃的操作进行了不足为奇的观察之后如何搜索它。很高兴我发现了这一点,因为解决方案有些隐藏在文档中。谢谢
>>> b = np.ones(2, int)
>>> a = np.zeros(2, int)
>>> c = np.arange(2,4)
>>> np.add.at(a, b, c)
>>> a
array([0, 5])