我正在尝试学习python,但遇到了一些令我困惑的事情。作为一个健全的检查,我想确保我可以从它的特征向量和特征值重建一个图拉普拉斯矩阵。在 R 中,这可以按预期工作,但在 python 中却不行。python 重建的矩阵相距甚远 - 范数(拉普拉斯 - 估计)~ 0.99,而在 R 中它是~1e-16。我希望有人可以向我解释这里发生了什么。我在下面发布了两种语言的代码:
在 R 中:
library(igraph)
g <- watts.strogatz.game(1, 20, 3, 0, loops = FALSE, multiple = FALSE)
A <- as.matrix(as_adjacency_matrix(g, type = c("both"),
attr = NULL, edges = FALSE, names = TRUE,
sparse = FALSE))
A <- -A
diag(A) <- abs(rowSums(A))
D <- diag(diag(A)^-0.5, dmn[1])
Ln <- D %*% A %*% D
eL <- eigen(Ln)
rL <- eL$vectors %*% diag(eL$values) %*% t(eL$vectors)
print(norm(Ln - rL))
在 Python 中:
import networkx as nx
import numpy as np
n=20
G = nx.watts_strogatz_graph(n, 3, 0)
L = nx.normalized_laplacian_matrix(G).toarray()
evals, evecs = np.linalg.eig(L)
idx = evals.argsort()[::-1]
evals = evals[idx]
F = evecs[:,idx]
D = np.diag(evals)
FDF = np.linalg.multi_dot([F, D, F.T])
rec = np.linalg.norm(L - FDF)
print(rec)
谢谢!
保罗