我的numpy数组修改有一个奇怪的行为。它可能是一个正常的" python中的行为,但我并不习惯这种语言:
B=[[1,2,3],[4,5,6],[7,8,9]]
b=np.asarray(B)
c=b
print("I display b :")
print(b)
c[0,0]=-c[0,0] # I multiply this coordinates by -1
print("I display c (modified at the right place : ok)")
print(c)
print("But b has also been modified ???!!!")
print(b)
输出:
I display b :
[[1 2 3]
[4 5 6]
[7 8 9]]
I display c (modified at the right place : ok)
[[-1 2 3]
[ 4 5 6]
[ 7 8 9]]
But b has also been modified ???!!!
[[-1 2 3]
[ 4 5 6]
[ 7 8 9]]
为什么b已被修改,即使我从未改变它?我只改变了......?
答案 0 :(得分:4)
因为python是通过引用工作的,所以当你设置13 13 10 2 1
时,它们都引用同一个对象。因此,对c的更改会影响b。
您可能希望执行以下操作:
c=b
这会使c成为一个新对象,修改它不会再影响b。
或使用numpy:
import copy
c = copy.copy(b)
答案 1 :(得分:1)
c只是一个别名。如果要复制数组,请使用c = np.copy(b)。
答案 2 :(得分:0)
除了已经提到的复制方法之外,您还可以像这样创建变量c
的副本:
B=[[1,2,3],[4,5,6],[7,8,9]]
b=np.asarray(B)
c = b.copy()
c[1, 1] = 15
print(b)
print(c)
会给你这样的输出:
[[1 2 3]
[4 5 6]
[7 8 9]]
[[ 1 2 3]
[ 4 15 6]
[ 7 8 9]]