在Python中,我可以通过多赋值来交换两个变量; 它也适用于列表:
l1,l2=[1,2,3],[4,5,6]
l1,l2=l2,l1
print(l1,l2)
>>> [4, 5, 6] [1, 2, 3]
但是当我想要交换一个NumPy数组的两行(例如在高斯算法中),它失败了:
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 的底层工作。