Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新调整分配规则的更改_Python_Numpy_Reshape_Assignment Operator - Fatal编程技术网

Python 重新调整分配规则的更改

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(

我有一个示例代码,其中“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.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中很重要,需要在文档中仔细阅读。