我无法在 python 中正确地将我想要的值分配给变量
I can't assign my desired value to a variable properly in python
我想操纵矩阵“b”,但由于我已将其初始值指定为等于矩阵“a”的初始值,因此矩阵“a”也被操纵,这是不需要的。我该如何解决这个问题?
import numpy as np
a=np.zeros((3,3))
b=a
b[0,:]=1
print('a=',a,'\n')
print('b=',b)
这段代码的结果是这样的:
a= [[1. 1. 1.]
[0. 0. 0.]
[0. 0. 0.]]
b= [[1. 1. 1.]
[0. 0. 0.]
[0. 0. 0.]]
如您所见,这两个矩阵都已修改。我写了这段小代码来说明我的问题。我的主程序比较大,但我发现了这个问题,就是这样。
第 b = a
行应该是 b = a.copy()
。
import numpy as np
a = np.zeros((3,3))
b = a.copy()
b[0,:] = 1
print('a = ',a,'\n')
print('b = ',b)
a = [[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
b = [[1. 1. 1.]
[0. 0. 0.]
[0. 0. 0.]]
由于数组 a 和 b 都是 python 中的可变对象,一个简单的 = 使它们指向内存中的相同位置——因此,对 a
的更改会导致对b
还有。这叫做浅拷贝.
你要找的是深拷贝:
b = a.copy()
见this tutorial for more details on shallow vs deep copies, or this one。
内置类型如 int、float 等在 python 中是不可变对象,因此没有浅拷贝。
我想操纵矩阵“b”,但由于我已将其初始值指定为等于矩阵“a”的初始值,因此矩阵“a”也被操纵,这是不需要的。我该如何解决这个问题?
import numpy as np
a=np.zeros((3,3))
b=a
b[0,:]=1
print('a=',a,'\n')
print('b=',b)
这段代码的结果是这样的:
a= [[1. 1. 1.]
[0. 0. 0.]
[0. 0. 0.]]
b= [[1. 1. 1.]
[0. 0. 0.]
[0. 0. 0.]]
如您所见,这两个矩阵都已修改。我写了这段小代码来说明我的问题。我的主程序比较大,但我发现了这个问题,就是这样。
第 b = a
行应该是 b = a.copy()
。
import numpy as np
a = np.zeros((3,3))
b = a.copy()
b[0,:] = 1
print('a = ',a,'\n')
print('b = ',b)
a = [[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
b = [[1. 1. 1.]
[0. 0. 0.]
[0. 0. 0.]]
由于数组 a 和 b 都是 python 中的可变对象,一个简单的 = 使它们指向内存中的相同位置——因此,对 a
的更改会导致对b
还有。这叫做浅拷贝.
你要找的是深拷贝:
b = a.copy()
见this tutorial for more details on shallow vs deep copies, or this one。
内置类型如 int、float 等在 python 中是不可变对象,因此没有浅拷贝。