我有这个示例代码,其中“ 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('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
答案 0 :(得分:1)
b是a的副本。 因为np.reshape函数不一定返回副本。 如文档所述:-
如果可能,这将是一个新的视图对象;否则,它将是副本。注意,不能保证返回数组的内存布局(C或Fortran连续)。
如果您想以某种方式知道您的副本是否为副本,请查看How can I tell if NumPy creates a view or a copy?
答案 1 :(得分:0)
我尝试了以下操作,并且有效
a=np.ones((3,3))
N=9
print(a)
b=np.ones((3,3))
b = a+5