Numpy数组:使用同时分配交换列

时间:2013-02-20 23:53:12

标签: python arrays numpy swap

我正在尝试使用同时分配来交换Numpy数组的列,并且我得到了一个意外的行为:

A = arange(12).reshape(3,4)
print(A)

# prints [[ 0  1  2  3]    Ok
#         [ 4  5  6  7]
#         [ 8  9 10 11]]

A[:,0], A[:,1] = A[:,1], A[:,0]
print(A)

# prints [[ 1  1  2  3]    Not what intended (swap)
#         [ 5  5  6  7]
#         [ 9  9 10 11]]

预期行为:评估RHS上数组的“视图”,然后由LHS上的目标对象执行分配,将RHS视图的内容“复制”到新位置。我声称,由于以下原因,复制是在切片到切片分配中进行的:

A = arange(12).reshape(3,4)
A[:,0] = A[:,1]
A[:,1] = array([99,99,99])
print A[:,0]

# prints: [1 5 9]

实际发生的事情:似乎在切片的同时分配中,ndarray在“一次一个”的RHS和LHS上评估和分配各种术语:首先A[:,0] = A[:,1]然后A[:,1] = A[:,0]。< / p>

这是否是由于ndarray类以不同于标准python方式的方式自定义同时分配?

0 个答案:

没有答案