繁体   English   中英

在numpy中生成对称矩阵的语义

[英]semantics of generating symmetric matrices in numpy

我试图制作一个随机对称矩阵来测试我的程序。 只要对称,我就根本不在乎数据(完全没有随机性)。

我的第一次尝试是:

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

但是, np.all(x==xT)返回False。 print x==xT产量

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

然后就可以了

这里发生了什么? 这些语句在语义上不是等效的吗? 有什么不同?

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

这样想吧...当您的算法到达索引(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM