在Python中,我可以通过多个假装来交换2个变量;它还可以处理列表:
l1,l2=[1,2,3],[4,5,6]
l1,l2=l2,l1
print(l1,l2)
>>> [4, 5, 6] [1, 2, 3]
但当我想交换两行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]而不是a3[1,0]。
我已经找到了解决这个问题的方法:例如a3[0,:],a3[1,:]=a3[1,:].copy(),a3[0,:].copy()
可以。但是,有谁能解释为什么多个矫揉造作的交换在numpy行中失败呢?我的问题涉及Python和Numpy的底层工作。
这是你想要的方式:
元组赋值中的两个独立赋值不针对彼此进行缓冲;一个在另一个之后发生,导致覆盖您的观察结果
相关问题 更多 >
编程相关推荐