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

使用MATLAB构建无向图邻接矩阵遇重复边错误的求助

解决MATLAB构建无向图邻接矩阵的重复边错误

问题根源

MATLAB的graph函数构建无向图时,会将(u,v)和(v,u)视为同一条重复边,但直接用unique(data,'rows')无法检测到这类镜像边——因为它们的行顺序不同。你之前查找镜像行的代码逻辑错误,导致整个矩阵被清空。

解决方案:标准化边后去重

核心思路是先将每条边的两个节点按从小到大排序,让镜像边变成完全相同的行,再进行去重操作,最后构建图和邻接矩阵。

具体代码

% 对每一行的节点进行排序,确保每条边的第一个节点 ≤ 第二个节点
data_sorted = sort(data, 2);

% 去除重复的边(包括原有的重复行和镜像行)
unique_edges = unique(data_sorted, 'rows');

% 构建无向图对象
G = graph(unique_edges(:,1), unique_edges(:,2));

% 获取邻接矩阵
A = adjacency(G);

为什么之前的方法失效?

  1. unique(data,'rows')无法检测镜像边:该函数只会识别完全相同的行,而无向图中(u,v)和(v,u)属于同一条边,但行内容不同,因此无法被检测到。
  2. 镜像行查找代码逻辑错误:ismember(data, fliplr(data),'rows')会将所有行匹配到自身的镜像(比如[1,2]会匹配到fliplr(data)中的[2,1],反之亦然),导致所有行都被标记为镜像行并删除,最终矩阵被清空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:35:09