簡體   English   中英

如何在networkx中使用python隨機排列圖的節點?

[英]How can I randomly permute the nodes of a graph with python in networkx?

我認為這可以通過 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)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM