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
的工具来为您完成繁杂的工作。