You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

城市高速路网图的图论距离度量:NetworkX计算可行性咨询

当然可以!完全能用你的边属性计算这些距离度量

NetworkX的直径、离心率、半径这些算法本质是基于最短路径来计算的,而它支持通过指定边的权重属性来定义"距离"的计算方式——正好匹配你的高速公路长度、预估通行时间这两个属性。

具体操作步骤:

1. 先给图的边添加对应属性

构建图的时候,把长度和通行时间作为边的属性存储进去,比如:

import networkx as nx

# 根据你的场景创建无向/有向图(如果是单向高速就用DiGraph)
G = nx.Graph()

# 添加城市节点
G.add_nodes_from(["北京", "上海", "广州", "深圳"])

# 带属性添加高速公路边
G.add_edge("北京", "上海", length=1318, travel_time=12)  # 长度单位:公里,通行时间单位:小时
G.add_edge("上海", "广州", length=1432, travel_time=13)
G.add_edge("广州", "深圳", length=102, travel_time=1.5)
G.add_edge("北京", "广州", length=2120, travel_time=18)

2. 计算度量时指定权重属性

调用NetworkX的对应函数时,通过weight参数指定你想用的属性(比如"length"或"travel_time"),就能基于该属性计算最短路径相关的度量:

  • 基于高速公路长度计算:
# 离心率:每个节点到其他所有节点的最短路径中的最大值
ecc_by_length = nx.eccentricity(G, weight="length")
# 直径:全网中任意两个节点间最短路径的最大值
diameter_by_length = nx.diameter(G, weight="length")
# 半径:全网所有节点离心率中的最小值
radius_by_length = nx.radius(G, weight="length")
  • 基于预估通行时间计算:
ecc_by_time = nx.eccentricity(G, weight="travel_time")
diameter_by_time = nx.diameter(G, weight="travel_time")
radius_by_time = nx.radius(G, weight="travel_time")

几个关键注意点:

  • 确保你的图是连通的:如果存在孤立的城市节点(无法通过高速到达其他节点),计算直径、半径这类全局度量时会报错。可以先用nx.is_connected(G)检查,非连通图的话可以考虑只针对最大连通分量计算:G_connected = nx.maximum_connected_component_subgraph(G)
  • 边属性名要准确:weight参数的值必须和你添加边时用的属性名完全一致,不然会默认把每条边权重当成1计算,结果就不对了
  • 有向图也支持:如果你的高速是单向通行,换成nx.DiGraph()创建图,上述函数同样支持指定weight参数

内容的提问来源于stack exchange,提问作者Amatya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:54:49