重塑更改分配规则
Reshape changes assignment rules
我有这个示例代码,其中 '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
b 是 a 的副本。
因为np.reshape函数不一定是returns的copy。
正如文档所说:-
This will be a new view object if possible; otherwise, it will be a copy. Note there is no guarantee of the memory layout (C- or Fortran- contiguous) of the returned array.
如果您想通过某种方式知道您的是否是副本,请查看 How can I tell if NumPy creates a view or a copy?
我尝试了以下方法并且有效
a=np.ones((3,3))
N=9
print(a)
b=np.ones((3,3))
b = a+5
我有这个示例代码,其中 '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
b 是 a 的副本。 因为np.reshape函数不一定是returns的copy。 正如文档所说:-
This will be a new view object if possible; otherwise, it will be a copy. Note there is no guarantee of the memory layout (C- or Fortran- contiguous) of the returned array.
如果您想通过某种方式知道您的是否是副本,请查看 How can I tell if NumPy creates a view or a copy?
我尝试了以下方法并且有效
a=np.ones((3,3))
N=9
print(a)
b=np.ones((3,3))
b = a+5