在Numpy的行交换

时间:2014-01-22 16:08:36

标签: python numpy

在Python中,我可以通过多重表示来交换2个变量;它也适用于列表:

l1,l2=[1,2,3],[4,5,6]
l1,l2=l2,l1
print(l1,l2)
>>> [4, 5, 6] [1, 2, 3]

但是当我想要交换2行numpy数组时(例如在Gauss算法中),它会失败:

import numpy as np
a3=np.array([[1,2,3],[4,5,6]])
print(a3)
a3[0,:],a3[1,:]=a3[1,:],a3[0,:]
print(a3)
>>> [[1 2 3]
     [4 5 6]]
    [[4 5 6]
     [4 5 6]]

我认为,由于一个奇怪的原因,这两列现在指向相同的值;但事实并非如此,因为前一行之后a3[0,0]=5改变了a3 [0,0]而不是a3 [1,0]。

我已经找到了如何处理这个问题:例如a3[0,:],a3[1,:]=a3[1,:].copy(),a3[0,:].copy()有效。但任何人都可以解释为什么具有多重影响的交换会因为numpy行而失败?我的问题涉及Python和Numpy的基础工作。

1 个答案:

答案 0 :(得分:24)

这可以按照您的意图运作:

a3[[0,1]] = a3[[1,0]]

元组赋值中的两个单独赋值不会相互缓冲;一个发生在另一个之后,导致覆盖你的观察