重塑变更分配规则

时间:2018-11-01 08:12:11

标签: 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('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 

2 个答案:

答案 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