Я пытаюсь выучить 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)
Спасибо!
Пол