如何用python求复杂网络拉普拉斯矩阵的次最小特征值?

2024-09-22 16:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python使用shift-invert模式计算复杂网络(有10000个节点)的laplacian矩阵的第二个最小特征值,代码如下:

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]

当运行上述代码时,我得到:

^{pr2}$

这个错误是否意味着拉普拉斯矩阵是奇异的? 我该怎么办? 有没有其他方法来计算这个次最小特征值(用Matlab或任何其他编程语言)?在


Tags: 代码importshiftas矩阵matrixdictlist
1条回答
网友
1楼 · 发布于 2024-09-22 16:29:16

您的代码对我(scipy1.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];在机器精度范围内,最小特征值为零,但第二个最小特征值不是。在

相关问题 更多 >