微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 NumPy: np.fill_diagonal() 改变所有相关变量的诊断值?

如何解决为什么 NumPy: np.fill_diagonal() 改变所有相关变量的诊断值?

亲爱的有经验的朋友,我在尝试使用 np.fill_diagonal() 时遇到了一个问题。首先,我从原始 NumPy 数组中设置了两个子变量。然后我使用 np.fill_diagonal() 更改其中一个变量的对角线值。但是,我发现所有变量的对角线值都已更改。

请问为什么会这样?所有相关的 NumPy 变量是否共享相同的内存?我怎么知道他们确切的记忆关系?谢谢!

这是简单的代码

# we set the original one
a = np.array([[    10.,1.,1.],[2.,20.,140.,8.,57.],[3.,3.,30.,21.,51.],[4.,4.,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的值,但实际上所有的ab1b2都被改变了。请问如何只改变b1的对角线值而不影响其他?谢谢!

a

array([[  0.,[  2.,0.,[  3.,[  4.,[  5.,0.]])

b2

array([[  0.,0.]])

解决方法

看起来 b1 和 b2 只是对 a 的引用。尝试使用 numpy.copy() 然后执行拼接以获得“深度复制”,以便 b1 和 b2 在内存中拥有自己的空间。查看 Numpy API documentation 中的 numpy.copy。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。