2017-06-09 429 views
1

我試圖計算的複雜網絡的拉普拉斯矩陣的第二最小特徵值(10000個節點)使用所述移位倒置模式蟒,這裏是代碼:如何用python獲得複雜網絡拉普拉斯矩陣的第二小特徵值?

import numpy as np 
import networkx as nx 
from scipy import sparse 
G = nx.watts_strogatz_graph(10000,4,0.1) 
degree_dict = nx.degree(G) 
degree_list = [] 
for i in degree_dict: 
    degree_list.append(degree_dict[i]) 
lap_matrix = sparse.diags(degree_list, 0)-nx.adjacency_matrix(G) 
eigval, eigvec = sparse.linalg.eigsh(lap_matrix, 2, sigma=0, which='LM') 
second_eigval = eigval[1] 

上面的代碼運行時,我得到:

RuntimeError: Factor is exactly singular 

錯誤是否意味着拉普拉斯矩陣是奇異的? 關於我應該如何進行的任何想法? 有沒有其他的方法來計算這個第二小的特徵值(用Matlab或任何其他編程語言)?

回答

2

您的代碼對我的作品(SciPy的1.0.0)幾乎完全爲書面,除了我簡化degree_list形成(這扔了KeyError異常在您的版本)

import numpy as np 
import networkx as nx 
from scipy import sparse 

G = nx.watts_strogatz_graph(10000,4,0.1) 
degree_dict = nx.degree(G) 
degree_list = [x[1] for x in degree_dict] 
lap_matrix = sparse.diags(degree_list, 0)-nx.adjacency_matrix(G) 
eigval, eigvec = sparse.linalg.eigsh(lap_matrix, 2, sigma=0, which='LM') 

現在eigval爲[1.48814294e-16, 4.88863211e-02];機器精度內的最小特徵值爲零,但第二小的特徵值不是。