Python networkX有向图边数
我有一个来自Python networkX有向图边数,python,graph,networkx,Python,Graph,Networkx,我有一个来自networkx包的multi-digraph类型的有向图G 下面两个电话的号码不同。他们不应该是一样的吗 G.边的数量() networkx.将矩阵转换为稀疏矩阵(G).nnz 不幸的是,我无法在手动创建的小图中重现此问题,如下面的示例所示,其中两个调用打印相同的数字5: import networkx as nx tmp = nx.MultiDiGraph([(0, 1), (1, 2), (2, 0), (1, 0), (3, 4)]) tmp.number_of_edge
networkx
包的multi-digraph
类型的有向图G
下面两个电话的号码不同。他们不应该是一样的吗
G.边的数量()
networkx.将矩阵转换为稀疏矩阵(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
是一个其他人生成的巨大图形,我无法在此处共享。一个多向图
可以在相同的两个节点之间有多条边
scipy.sparse.csr_矩阵的nnz
属性返回非空矩阵值的数量。如果图形在两个节点之间有多条边,则nnz
的值将是每个方向上连接的节点数,而.number\u of_edges()
将是图形中的边总数。这些数字将会不同
如果要获取边的总数,请使用.sum()
值作为csr\u矩阵
import networkx as nx
tmp = nx.MultiDiGraph([(0, 1), (1, 2), (2, 0), (1, 0), (3, 4)])
tmp.add_edge(3, 4)
tmp.add_edge(3, 4)
tmp.add_edge(3, 4)
nx_edge_count = tmp.number_of_edges()
scipy_nnz = nx.convert_matrix.to_scipy_sparse_matrix(tmp).nnz
scipy_edge_count = nx.convert_matrix.to_scipy_sparse_matrix(tmp).sum()
print("Number of edges: {}".format(nx_edge_count))
print("Number of non-zero matrix values: {}".format(scipy_nnz))
print("Sum of sparse matrix values: {}".format(scipy_edge_count))
边数:8
非零矩阵值的数量:5
稀疏矩阵值之和:8
有一个可复制的例子吗?不幸的是没有--我更新了问题。这很有帮助,谢谢。我意识到邻接矩阵包含值n
,而不是1
,用于相同两个节点之间存在n
次的边。