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