[英]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.