我正在使用Jupyter笔记本用Python尝试以下代码:
import numpy as np
i=2
j=0
basis = np.matrix([False,False,True,True,True])
basis_mod = basis
print "basis"
print basis
print "basis_mod"
print basis_mod
basis_mod[:,i] = False
print "basis"
print basis
print "basis_mod"
print basis_mod
basis_mod[:,j] = True
print "basis"
print basis
print "basis_mod"
print basis_mod
控制台输出/打印内容是:
basis
[[False False True True True]]
basis_mod
[[False False True True True]]
basis
[[False False False True True]]
basis_mod
[[False False False True True]]
basis
[[ True False False True True]]
basis_mod
[[ True False False True True]]
我的问题是:当我修改基差时,为什么要修改可变基差?为了清楚起见,我正在修改basis\u mod变量,所以我希望basis变量不会改变。但是,当我打印基变量时,它将变为等于基变量
请注意,如果我将代码更改为:
import numpy as np
i=2
j=0
basis = np.matrix([False,False,True,True,True])
basis_mod = np.matrix([False,False,True,True,True])
print "basis"
print basis
print "basis_mod"
print basis_mod
basis_mod[:,i] = False
print "basis"
print basis
print "basis_mod"
print basis_mod
basis_mod[:,j] = True
print "basis"
print basis
print "basis_mod"
print basis_mod
打印结果与预期一致:
basis
[[False False True True True]]
basis_mod
[[False False True True True]]
basis
[[False False True True True]]
basis_mod
[[False False False True True]]
basis
[[False False True True True]]
basis_mod
[[ True False False True True]]
因此,我怀疑问题出在line basis_mod=basis上,但我不明白为什么
非常感谢您的帮助!这主要是搞乱了我正在编写的一个算法
在python中,当您编写
a=b
时,实际上是将变量b引用到变量a,如果您对任何一个变量进行了更改,那么这些更改将自动应用到另一个变量。事实上,它们会变得完全相同,名字也会不同在处理数组或列表(这方面的任何可变数据结构)时,实际上是存储对该变量的引用
如果您希望
basis
保持不变,则需要创建basis
的副本并将其存储在basis_mod
相关问题 更多 >
编程相关推荐