2013-05-20 74 views
2

我想选择并打印一个高度互连的网络中的三个节点。从给定节点开始,函数应该选择第二个节点作为步行的最高度中心度的相邻节点。在具有最高属性值的节点之间选择随机节点

在平局的情况下,我想让程序在这些节点之间随机选择。

这是我到目前为止有:

import networkx as nx 
from random import choice 
g =nx.Graph() 
g.add_nodes_from(range(1,5)) 
g.add_edges_from([(1,5),(2,5),(3,5),(4,5), (1,2),(2,3),(3,4),(4,5)]) 

nx.set_node_attributes(g,'degree_cent',nx.degree_centrality(g)) 
degree_walk =[]     

node1=g.nodes()[2] 
degree_walk.append(node1) 
for node2 in g.neighbors(node1): 
    if max(g.node[node2]['degree_cent'], g.node[node2]['degree_cent'].get): 
      node2 = choice(g.neighbors(node1)) 
      degree_walk.append(node2) 
print degree_walk 
+0

嘿和welc青梅。只是一个友好的建议。当你在这里写问题时,你应该尽量避免长时间连续的文本。祝你好运! –

回答

1

在这里你去(由this SO answer上找到词典的最大价值的关键值的启发):

# Find all the neighbors with maximum centrality: 
highest_centrality = max([g.node[n]['degree_cent'] 
          for n in g.neighbors(node1)) 
most_central_neighbors = [n for n in g.nodes() 
          if g.node[n]['degree_cent'] == highest_centrality] 
# Pick one at random: 
random_central_neighbor = choice([most_central_neighbors]) 
# Add it to the list: 
degree_walk.append(random_central_neighbor) 
print degree_walk 

请注意,如果你不这样做关心关系(并且很乐意接受原始列表中的第一个)你可以这样做:

# Find all the neighbors with maximum centrality: 
most_central_neighbors = max(g.neighbors(node1), 
          key=lambda(n): g.node[n]['degree_cent']) 
相关问题