簡體   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