我使用NetworkX在python中进行网络分析。我确定每条边的权重,并按以下方式将该边添加到图中:
import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
airports = ['ATL','LAX','ORD']
weights = [500,200,150] #Note that in my real code I I calculated these weights, they are not provided
G = nx.Graph()
G.add_nodes_from(airports)
weightlst = []
airports_pos = []
checked_airports = []
i = 0
for airport1 in airports:
for airport2 in airports:
if airport1 != airport2 and checked_airports.count([airport1,airport2])==0 and checked_airports.count([airport2,airport1])==0:
weightedge = weights[i]
weightlst.append(weightedge)
weightedge = weightedge*0.0020+0.5
G.add_edge(airport1, airport2, weight=weightedge)
checked_airports.append([airport1,airport2])
i = i + 1
就上下文而言,每条边的重量表示两个机场之间发生了多少次飞行,我的问题是不清楚哪条路线是什么?是最繁忙的'因为相关的边缘是相关的边缘。我希望画出最后重量最大的边缘,以便清楚哪条是最繁忙的航线。在网络中。
答案 0 :(得分:1)
使用:
edges=sorted(G.edges(data=True), key=lambda t: t[2].get('weight', 1))
答案 1 :(得分:0)
将所有边缘数据放入列表中,然后使用自定义键功能对其进行排序(这很容易查找)。 NetworkX可能没有任何功能可以执行您想要的操作,因为它不需要。
答案 2 :(得分:0)
添加到所选答案中,因为它可能会感觉有些复杂......(由于声誉不足而无法发表评论并且编辑请求被拒绝¯\(ツ)/¯)
G.edges
返回添加到图 G
的边列表(每条边由两个元素的元组表示:起始节点和结束节点),将其 data
属性设置为 True
包括为该列表中的每条边设置的权重作为 元组的第三个元素em> 作为字典,其中权重的键是为边权重设置的属性名称(默认为 'weight'
)。
lambda 函数评估每个 tuple t
并通过第三个元素(即字典)获取与键 { 对应的值来比较它们{1}},如果未找到该键,则默认为 1。
需要注意的是如果您为边权重选择了除 'weight'
以外的属性名称,则上面的代码行将不会工作,也不会显示任何错误,它什么也不做;因为它在所有情况下都会默认返回 'weight'
,因为它找不到键,因此不会有效地排序。一条边可以具有不同解释的不同属性,因此请务必根据您要排序的键选择键。