Python 获取图形网络X中的前n条边

Python 获取图形网络X中的前n条边,python,networkx,Python,Networkx,我有一个带权的有向多重图。边加法看起来像 g.add_edge(source_a,source_b, weight= some_Weight) 构建图形时,我希望仅在基于权重的节点之间的顶部节点之间具有边。如果我的图是 1,2,0.5 1,2,0.6 1,2,0.4 1,3,0.5 ... 我只希望看到每个节点之间的前2条边。我说的顶部是指具有最高权重的边。 因此,输出将类似于 1,2,0.6 1,2,0.5 1,3,0.5 我正在删除其余的边。如何使用python/netwo

我有一个带权的有向多重图。边加法看起来像

 g.add_edge(source_a,source_b, weight= some_Weight)
构建图形时,我希望仅在基于权重的节点之间的顶部节点之间具有边。如果我的图是

 1,2,0.5
 1,2,0.6
 1,2,0.4
 1,3,0.5
 ...
我只希望看到每个节点之间的前2条边。我说的顶部是指具有最高权重的边。 因此,输出将类似于

1,2,0.6
1,2,0.5
1,3,0.5

我正在删除其余的边。如何使用python/networkx实现这一点?

您只需使用特定属性在边上迭代即可:

import networkx as nx

G = nx.MultiGraph()
G.add_edge(1,2,weight=.5)
G.add_edge(1,2,weight=.6)
G.add_edge(1,2,weight=.4)
G.add_edge(1,3,weight=.5)

cutoff = .45

top = [edge for edge in G.edges_iter(data=True) 
       if edge[2]['weight'] > cutoff]

print top
这使得:

[(1, 2, {'weight': 0.5}), (1, 2, {'weight': 0.6}), (1, 3, {'weight': 0.5})]
从这里创建一个只包含这些边的新图形将非常简单

G2 = nx.MultiGraph(top)

您可以简单地使用特定属性遍历边:

import networkx as nx

G = nx.MultiGraph()
G.add_edge(1,2,weight=.5)
G.add_edge(1,2,weight=.6)
G.add_edge(1,2,weight=.4)
G.add_edge(1,3,weight=.5)

cutoff = .45

top = [edge for edge in G.edges_iter(data=True) 
       if edge[2]['weight'] > cutoff]

print top
这使得:

[(1, 2, {'weight': 0.5}), (1, 2, {'weight': 0.6}), (1, 3, {'weight': 0.5})]
从这里创建一个只包含这些边的新图形将非常简单

G2 = nx.MultiGraph(top)

定义前两名:添加前两名?两个具有最高权重的节点离开一个特定节点?在构建图形之前过滤数据不是更容易吗?您可以使用类似于
itertools.groupby
的工具为您完成繁杂的工作?两个具有最高权重的节点离开一个特定节点?在构建图形之前过滤数据不是更容易吗?您可以使用类似于
itertools.groupby
的工具来为您完成繁杂的工作。