2017-06-09 436 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];机器精度内的最小特征值为零,但第二小的特征值不是。