【问题标题】:Default order of networkx graph?networkx 图的默认顺序?
【发布时间】:2021-03-18 18:16:20
【问题描述】:

我最近使用networkx.adjacency_matrix(G) 为图生成邻接矩阵。当我绘制邻接矩阵 (1) 时,我很惊讶它显示了这些不同的集群。当节点顺序按照我添加到图中的顺序绘制时,这些集群就会消失 (2) [相当于networkx.adjacency_matrix(G, sorted(list(G.nodes())]。

networkx在做邻接矩阵时默认的排序协议是什么?这似乎没有记录在案。

默认“顺序”:

添加到图中的节点/边的顺序:

【问题讨论】:

  • 我有预感;你使用的是哪个版本的 Python(准确地说)?
  • 你的邻接矩阵看起来像一些(度数校正的)随机块模型
  • 确实,Python版本是3.7.4

标签: graph networkx


【解决方案1】:

结果可能取决于 Arya 提出的你的 python 版本,主题是关于字典的默认排序。看这里:Are dictionaries ordered in Python 3.6+?

adjacency_matrix的代码,将带你到to_scipy_sparse_matrix,使用的默认节点顺序是list(G)

【讨论】:

  • 感谢您提供此信息,我还看到默认节点顺序是list(G)。我要消除歧义的是,networkX 使用的节点顺序是否与 Python 中字典的顺序完全相同?此外,即使它依赖于 Python 字典排序,这如何以任何方式创建类似模式的随机块模型?
  • 您链接的答案指定字典是“插入排序的”。然而,当我按插入顺序绘制邻接矩阵时,它会丢失块结构。
  • 我猜list(G) 在你的情况下不是升节点(你会通过排序得到)。进一步猜测,我假设您已经通过添加边创建了图形,例如(0,1), (0,3), (1, 3), (2,3) 将导致节点顺序 0,1,3,2。您可以通过首先手动添加节点来fix,即G.add_nodes_from
猜你喜欢
  • 1970-01-01
  • 2020-03-27
  • 2011-05-07
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 2021-06-16
  • 2012-12-15
相关资源
最近更新 更多