为什么由Networkx和按发生率矩阵计算的拉普拉斯是不同的


import networkx as bx
import numpy as np
G1 = nx.erdos_renyi_graph(20, .3)
L1 = nx.linalg.laplacian_matrix(G1)
A1=nx.incidence_matrix(G1)
L1_inc = A1*np.transpose(A1)
L1_inc == L1

但答案并不是对所有元素都是正确的。既然拉普拉斯不是定向的,那有什么问题呢?

如果您需要更多信息,请告诉我。

函数 nx.incidence_matrix(( 默认给出一个无定向的发生率矩阵。 你可以传递定向=True来返回定向版本。例如:

In [1]: import networkx as nx
In [2]: G = nx.path_graph(4)
In [3]: I = nx.incidence_matrix(G,oriented=True)
In [4]: I.todense()
Out[4]: 
matrix([[-1.,  0.,  0.],
        [ 1., -1.,  0.],
        [ 0.,  1., -1.],
        [ 0.,  0.,  1.]])
In [5]: L = nx.laplacian_matrix(G)
In [6]: L.todense()
Out[6]: 
matrix([[ 1, -1,  0,  0],
        [-1,  2, -1,  0],
        [ 0, -1,  2, -1],
        [ 0,  0, -1,  1]])
In [7]: (I*I.T).todense()
Out[7]: 
matrix([[ 1., -1.,  0.,  0.],
        [-1.,  2., -1.,  0.],
        [ 0., -1.,  2., -1.],
        [ 0.,  0., -1.,  1.]])

最新更新