Python 重新调整分配规则的更改
我有一个示例代码,其中“a”的值没有在代码的逻辑中显式更新。然而,当我打印输出时,变量“a”和“b”都会更新。你能解释一下原因吗Python 重新调整分配规则的更改,python,numpy,reshape,assignment-operator,Python,Numpy,Reshape,Assignment Operator,我有一个示例代码,其中“a”的值没有在代码的逻辑中显式更新。然而,当我打印输出时,变量“a”和“b”都会更新。你能解释一下原因吗 import numpy as np a=np.ones((3,3)) N=9 a = np.reshape(a, (N, 1), 'F') for i in np.arange(0, N, 1): b = np.reshape(a, (N, 1), 'F') b[i, 0] = a[i, 0] + 5 print(i) print(
import numpy as np
a=np.ones((3,3))
N=9
a = np.reshape(a, (N, 1), 'F')
for i in np.arange(0, N, 1):
b = np.reshape(a, (N, 1), 'F')
b[i, 0] = a[i, 0] + 5
print(i)
print('a', a[i, 0])
print('b', b[i, 0], '\n')
Output:
0
a 6.0
b 6.0
1
a 6.0
b 6.0
2
a 6.0
b 6.0
3
a 6.0
b 6.0
4
a 6.0
b 6.0
5
a 6.0
b 6.0
6
a 6.0
b 6.0
7
a 6.0
b 6.0
8
a 6.0
b 6.0
b是a的副本。
因为np.reformate函数不一定返回副本。
正如文件所说:-
如果可能,这将是一个新的视图对象;否则,它将是一个副本。注意:不能保证返回数组的内存布局是C或Fortran连续的
如果你想知道你的是不是副本,那么看看我试过以下方法,效果很好
a=np.ones((3,3))
N=9
print(a)
b=np.ones((3,3))
b = a+5
复制数组以确保正确。b=np.reformea,N,1,“F”。CopyReformate通常生成一个视图,而不是副本。这种区别在numpy中很重要,需要在文档中仔细阅读。