亲爱的经验丰富的朋友,我在尝试使用np.fill_diagonal()
时遇到了一个问题。首先,我从原始的NumPy数组中设置了两个子变量。然后,我使用np.fill_diagonal()
来更改其中一个变量的对角线的值。然而,我发现所有变量的对角线的值都被改变了。
我可以问一下为什么会发生这种情况吗?所有相关的NumPy变量是否共享相同的内存?我怎么才能知道他们确切的记忆关系呢?谢谢!
下面是简单的代码:
# we set the original one
a = np.array([[ 10., 1., 1., 1., 1.],
[2., 20., 140., 8., 57.],
[3., 3., 30., 21., 51.],
[4., 4., 21., 40., 56.],
[5., 5., 31., 16., 50.]])
# the two sub-variables
b1 = a[:5,:5]
b2 = a[:5,:5]
# then I change the diagonal value of one of the sub-variables
np.fill_diagonal(b1, 0)
我们应该只更改b1
的值,但实际上所有的a
、b1
和b2
都被更改了。请问怎样才能只更改b1
的对角线值,而不影响其他人?谢谢!
a
array([[ 0., 1., 1., 1., 1.],
[ 2., 0., 140., 8., 57.],
[ 3., 3., 0., 21., 51.],
[ 4., 4., 21., 0., 56.],
[ 5., 5., 31., 16., 0.]])
b2
array([[ 0., 1., 1., 1., 1.],
[ 2., 0., 140., 8., 57.],
[ 3., 3., 0., 21., 51.],
[ 4., 4., 21., 0., 56.],
[ 5., 5., 31., 16., 0.]])
发布于 2021-02-23 05:25:09
看起来b1和b2只是对a的引用。尝试使用numpy.copy(),然后执行拼接以获得一个“深度副本”,这样b1和b2就可以在内存中拥有自己的空间。查看Numpy API documentation中的numpy.copy。
https://stackoverflow.com/questions/66323603
复制相似问题