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

使用igraph包计算带边权网络全节点距离矩阵的问题求助

正确实现步骤

核心错误原因

  • shortest.paths() 第一个入参要求是igraph生成的网络对象,你传入了边数据框data,属于参数类型错误
  • 你未将边长度km作为权重属性绑定到网络对象中,默认会计算无权跳数,无法得到实际距离结果
  • v和to参数设置错误,若需要所有节点对的距离矩阵,无需额外指定这两个参数,函数默认会计算全部节点两两之间的最短路径

正确实现代码(基于你已有的生成逻辑)

library(igraph)
# 原有生成网络的代码
network <- graph_from_literal(1--2,2--3,3--4,4--5,3--6,6--7,3--8,8--9)
# 原有边数据框
data <- data.frame(Origin=c(1,2,3,4,3,6,3,8), Destination=c(2,3,4,5,6,7,8,9), km=c(0.3,0.5,0.2,0.1,1,2,0.6,0.4))
# 给网络对象的边绑定权重(你用graph_from_literal生成的边顺序和data边顺序完全一致,可直接赋值)
E(network)$km <- data$km
# 计算带权重的全节点最短路径距离矩阵
distMatrix <- shortest.paths(network, weights = E(network)$km)
# 打印验证结果
print(distMatrix)

更稳妥的实现方案(避免边顺序不匹配)

你可以直接用边数据框生成网络,无需手动拼接边和权重,避免顺序不一致导致的权重绑定错误:

library(igraph)
data <- data.frame(Origin=c(1,2,3,4,3,6,3,8), Destination=c(2,3,4,5,6,7,8,9), km=c(0.3,0.5,0.2,0.1,1,2,0.6,0.4))
# 直接用边数据框生成无向网络,自动绑定km为边属性
network <- graph_from_data_frame(data, directed = FALSE)
# 计算最短路径矩阵
distMatrix <- shortest.paths(network, weights = E(network)$km)

结果验证

比如节点1到节点7的最短路径为1-2-3-6-7,对应距离为0.3+0.5+1+2=3.8,查看distMatrix["1","7"]即可得到该数值,验证计算结果正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:45:03