2013-01-24 360 views
1

我有一個對稱矩陣(無向圖的鄰接矩陣),我有一個特定的特徵值(最大特徵值),我想要特徵向量與它相關聯(左或右,任何一個,因爲我相信左邊只是對稱矩陣權的轉置)。SciPy - 計算對稱矩陣中特定特徵值的特徵向量

我正在運行的圖可能從數千到數十萬個節點,因此相應的鄰接矩陣將會很大。然而,密度很稀疏,所以相應的矩陣也是稀疏的。

在SciPy中有這樣做的有效方法嗎?更好的是,是否有一種方法可以只計算給定對稱矩陣的主要特徵值和相應的特徵向量(這意味着我不必使用linalg.eigvals明確計算主要特徵值)。

回答

3

是的,,h最後代表Hermitian,還有一個版本爲非對稱矩陣,scipy.sparse.linalg.eigs

如果a是你的矩陣,稀少或沒有,您的通話將看起來像:

evals, evecs = scipy.sparse.linalg.eigsh(a, k=1) 

evalsevecs是特徵值和對應的特徵向量的陣列,因爲你可以要求不止一個,如果設置k爲1以外的值。返回的特徵值和向量由which參數控制,默認值爲LM,代表最大值爲

+0

太棒了,謝謝!還有一件事 - 與最大特徵值相關的特徵向量不一定是最大幅度正確的向量?所以儘管'LM'將返回最大的特徵值,返回的特徵向量可能不是與那個最大特徵值相關聯的特徵向量,或者返回的特徵向量是依賴於哪個特徵值被計算出來的? – adelbertc

+1

特徵向量不具有固有的大小。他們通常是正常化的。 – bogatron

+0

哦,對了,我忘了 - 所以我猜測返回的特徵向量是與特徵值相關的那些(在我的情況下是最大的)? – adelbertc

相關問題