使用scipy.sparse.csgraphlaplacian()函数计算网络图的特征向量和特征值
import numpy as np
from scipy.sparse import csgraph
import matplotlib.pyplot as plt
# 创建一个6个节点的有向图
adjacency_matrix = np.array([[0, 1, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0]])
# 计算拉普拉斯矩阵和特征值、特征向量
laplacian_matrix = csgraph.laplacian(adjacency_matrix, normed=False)
eigenvalues, eigenvectors = np.linalg.eig(laplacian_matrix.toarray())
# 打印特征值和特征向量
print("Eigenvalues:")
print(eigenvalues)
print("
Eigenvectors:")
print(eigenvectors)
# 绘制特征值的散点图
plt.scatter(np.arange(len(eigenvalues)), eigenvalues.real)
plt.xlabel("Index")
plt.ylabel("Eigenvalue")
plt.title("Eigenvalues of Laplacian Matrix")
plt.show()
# 绘制特征向量的折线图
plt.plot(np.arange(len(eigenvectors)), eigenvectors[:, 0].real, label="1st Eigenvector")
plt.plot(np.arange(len(eigenvectors)), eigenvectors[:, 1].real, label="2nd Eigenvector")
plt.plot(np.arange(len(eigenvectors)), eigenvectors[:, 2].real, label="3rd Eigenvector")
plt.xlabel("Index")
plt.ylabel("Eigenvector Value")
plt.title("Eigenvectors of Laplacian Matrix")
plt.legend()
plt.show()
# 输出结果:
# Eigenvalues:
# [ 3.73205081e+00+0.j 2.73205081e+00+0.j -9.34340742e-17+0.j
# -1.73205081e+00+0.j -1.73205081e+00+0.j 3.00000000e+00+0.j]
#
# Eigenvectors:
# [[-4.08248290e-01 -5.00000000e-01 -5.19584319e-01 5.00000000e-01
# -4.08248290e-01 -2.77555756e-17]
# [-4.08248290e-01 5.00000000e-01 -3.18022451e-01 2.77555756e-17
# 4.08248290e-01 -5.00000000e-01]
# [-4.08248290e-01 -1.99840144e-16 2.99978241e-01 -2.22044605e-16
# 4.08248290e-01 5.00000000e-01]
# [-4.08248290e-01 -5.00000000e-01 1.09053629e-01 -5.00000000e-01
# -4.08248290e-01 3.33066907e-16]
# [-4.08248290e-01 5.00000000e-01 3.02084592e-01 2.35922393e-16
# 4.08248290e-01 5.00000000e-01]
# [-4.08248290e-01 5.00000000e-01 -3.63023432e-01 5.00000000e-01
# -4.08248290e-01 5.00000000e-01]]
