【问题标题】:Expected behaviour for repeated numpy operations重复 numpy 操作的预期行为
【发布时间】:2016-10-24 05:46:24
【问题描述】:

我在寻找关于 numpy 数组重复操作的问题时找到了这个答案:Increment Numpy multi-d array with repeated indices。我现在的问题是,为什么会出现这种行为。

import numpy as np
t = np.eye(4)

t[[0,0,1],[0,0,1]]

导致

array([1.,1.,1.])

不应该

t[[0,0,1],[0,0,1]]+=1 

导致

[[3,0,0,0],
 [0,2,0,0],
 [0,0,1,0],
 [0,0,0,1]]

?

【问题讨论】:

标签: python arrays numpy indices in-place


【解决方案1】:

请参阅documentation 了解数组索引以及基本索引和高级索引之间的区别。

t[[0,0,1],[0,0,1]] 属于高级索引类别,如文档中所述:

高级索引始终返回数据的副本(与返回视图的基本切片相反)。

副本在第一次增量之前被评估,所以正如预期的那样,

import numpy as np
t = np.eye(4)
t[[0,0,1],[0,0,1]] += 1
print(t)

打印:

[[ 2.  0.  0.  0.]
 [ 0.  2.  0.  0.]
 [ 0.  0.  1.  0.]
 [ 0.  0.  0.  1.]]

根据上面的 cmets,使用 numpy.ufunc.atnumpy.add.at 来解决这个问题。

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 2018-11-08
    • 2016-10-08
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2017-05-27
    • 2017-09-08
    • 1970-01-01
    相关资源
    最近更新 更多