【发布时间】:2014-02-12 19:30:32
【问题描述】:
在 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 数组时(例如在高斯算法中),它失败了:
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 的基础工作。
【问题讨论】:
-
好的,谢谢,这个问题没有在可能重复的列表中自动提出。
-
没问题 - 我知道它的唯一原因是因为我回答了它。