在做矩阵的行变换的时候,发现赋值会重复
例如矩阵
6 2 3
4 5 6
7 8 9
如果我想第二行与第一行对换,
def row_transformation(x):
a = np.argmin(x[:,0])
b = x[a,:]
c = b
d = x[0,:]
x[a,:]=d
x[0,:]=c
return x
发现最后结果是
[[6 2 3]
[6 2 3]
[7 8 9]]
使用debug查看
发现在把d值赋予第二行的时候,b,c都会被更新为d的值。
后来才发现,是深浅拷贝的原因。
python的赋值只是给了个引用地址,并没有重新创建对象。
id(b)=1957048230096
id©=1957048230096
def row_transformation(x):
a = np.argmin(x[:,0])
b = copy.deepcopy(x[a,:])
c = copy.deepcopy(x[0,:])
x[a,:]=c
x[0,:]=b
return x
最后完成。
[[4 5 6]
[6 2 3]
[7 8 9]]