gpt4 book ai didi

python - numpy 中生成对称矩阵的语义

转载 作者:行者123 更新时间:2023-12-01 05:42:45 42 4
gpt4 key购买 nike

我尝试制作一个随机对称矩阵来测试我的程序。我根本不关心数据,只要它是对称的(根本不关心足够的随机性)。

我的第一次尝试是这样的:

x=np.random.random((100,100))
x+=x.T

但是,np.all(x==x.T) 返回 False。 打印 x==x.T 产量

array([[ True,  True,  True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
...,
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True]], dtype=bool)

我尝试运行一个 n=10 的小型测试示例来查看发生了什么,但该示例的工作原理正如您所期望的那样。

如果我这样做:

x=np.random.random((100,100))
x=x+x.T

然后就可以正常工作了。

这是怎么回事?这些陈述在语义上不是等价的吗?有什么区别?

最佳答案

这些语句在语义上并不等效。 x.T 返回原始数组的 View 。在 += 情况下,您实际上是在迭代时更改 x 的值(这会更改 x.T 的值)。

这样想......当你的算法到达索引(3,4)时,它在伪代码中看起来像这样:

x[3,4] = x[3,4] + x[4,3]

现在,当迭代达到 (4,3) 时,您会执行

x[4,3] = x[4,3] + x[3,4]

但是,x[3,4] 与您开始迭代时的情况不同。

<小时/>

在第二种情况下,您实际上创建了一个新的(空)数组并更改了空数组中的元素(从不写入 x)。所以伪代码看起来像这样:

y[3,4] = x[3,4] + x[4,3]

y[4,3] = x[4,3] + x[3,4]

这显然会给你一个对称矩阵(y

关于python - numpy 中生成对称矩阵的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091285/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com