我有一个来自G
包的MultiDiGraph
类型的有向图networkx
。
两个通话以下的号码不同。他们不应该是一样的吗?
G.number_of_edges()
networkx.convert_matrix.to_scipy_sparse_matrix(G).nnz
不幸的是,我无法在我手动创建的小图中重现此问题,如下面的示例所示,其中两个调用打印了相同的数字5:
import networkx as nx
tmp = nx.MultiDiGraph([(0, 1), (1, 2), (2, 0), (1, 0), (3, 4)])
tmp.number_of_edges(): 5, nx.convert_matrix.to_scipy_sparse_matrix(tmp).nnz: 5
这是G
的输出:
G.number_of_edges(): 87780, nx.convert_matrix.to_scipy_sparse_matrix(G).nnz: 84242
G
是其他人生成的巨大图形,我无法在此处分享。
答案 0 :(得分:1)
MultiDiGraph
在相同的两个节点之间可以有多个边。
nnz
的{{1}}属性返回非空矩阵值的数量。如果图形在两个节点之间有多个边,则scipy.sparse.csr_matrix
的值将是每个方向上连接的节点数,而nnz
将是图形中的边总数。这些数字会有所不同!
如果要获取边的总数,请为.number_of_edges()
使用.sum()
值。
csr_matrix
边数:8
非零矩阵值的数量:5
稀疏矩阵值的总和:8