python - 如何在networkx中使用python随机排列图的节点?

标签 python networkx graph-theory

我认为这可以通过 relabel_nodes 来完成,但是如何创建一个排列节点的映射?我想排列图的节点,同时保持网络结构完整。目前,我正在使用一组打乱的节点重建图表,这似乎不是最有效的方法:

import networkx as nx
import random

n=10
nodes=[]
for i in range(0,n):
  nodes.append(i)
G=nx.gnp_random_graph(n,.5)
newG=nx.empty_graph(n)
shufflenodes=nodes
random.shuffle(shufflenodes)
for i in range(0,n-1):
  for j in range(i+1,n):
    if(G.has_edge(i,j)):
      newG.add_edge(shufflenodes[i],shufflenodes[j])

有人知道如何加快速度吗?

最佳答案

您可以做的是构建随机映射并使用 relabel_nodes .

代码:

# create a random mapping old label -> new label
node_mapping = dict(zip(G.nodes(), sorted(G.nodes(), key=lambda k: random.random())))
# build a new graph
G_new = nx.relabel_nodes(G, node_mapping)

示例:

>>> G.nodes()
NodeView((0, 1, 2, 3, 4))
>>> G.edges()
EdgeView([(0, 1), (0, 2), (0, 3), (1, 2), (3, 4)])
>>> node_mapping
{0: 2, 1: 0, 2: 3, 3: 4, 4: 1}
>>> G_new.nodes()
NodeView((2, 0, 3, 4, 1))
>>> G_new.edges()
EdgeView([(2, 0), (2, 3), (2, 4), (0, 3), (4, 1)])

关于python - 如何在networkx中使用python随机排列图的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59739750/

相关文章:

python - 如何使用 flask 和 wtforms 使单选字段显示默认值

python - NetworkX二分色混合顺序

rust - 如何从特征实现中返回 HashMap 键的迭代器?

algorithm - 找到一个点,使得到一组点 P 中任意点的最大距离最小化

c++ - 有向图 - 如何计算图中每个其他顶点可到达的顶点数?

python - 如何使用 pylab.imshow() 显示 np.array

python - 如何在python端口扫描器脚本中添加for循环?

python - 为序列 InvalidArgument 构建/训练 1D CNN

python - NetworkX:中心有一个节点的圆形图

python - 将子列表与公共(public)元素分组