欢迎访问宙启技术站
智能推送

使用scipy.sparse.csgraphlaplacian()函数计算网络图的特征向量和特征值

发布时间:2023-12-23 19:10:35

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]]