首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么使用NumPy: np.fill_diagonal()更改所有相关变量的诊断值?

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

Stack Overflow用户
提问于 2021-02-23 05:18:47
回答 1查看 36关注 0票数 1

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

我可以问一下为什么会发生这种情况吗?所有相关的NumPy变量是否共享相同的内存?我怎么才能知道他们确切的记忆关系呢?谢谢!

下面是简单的代码:

代码语言:javascript
运行
复制
# 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的值,但实际上所有的ab1b2都被更改了。请问怎样才能只更改b1的对角线值,而不影响其他人?谢谢!

代码语言:javascript
运行
复制
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.]])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 05:25:09

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66323603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档