【问题标题】:Adjacency matrix must be symmetric邻接矩阵必须是对称的
【发布时间】:2016-11-05 07:53:12
【问题描述】:

问题

我想从我的 EdgeList 创建一个无向图。但由于我的 Edgelist 不是密集的双数组。我耗尽了所有包含零的边缘连接,但我想问题是边缘列表不是恒定的,这是我的边缘列表的开始:

Edgelist= 
    10965   10879
    10965   10962
    10965   10966
    10965   10967
    11382   11360
    11382   11381
    11382   11384
    11382   11553
    11383   11380
    11383   11381
    11383   11384
    11383   11389

所以我尝试创建一个邻接矩阵,以期防止出现source is not a dense double array 错误

我使用的代码

    EdgeList=unique(EdgeList,'rows');
    sz = max(EdgeList(:));
    A = sparse(EdgeList(:,1), EdgeList(:,2), 1, sz, sz);
    G=graph(A);

现在我得到下一个错误

邻接矩阵必须是对称的。

我没有办法从这样的数据集创建图表,有人可以帮忙吗?

【问题讨论】:

    标签: matlab graph


    【解决方案1】:

    您必须创建对称的邻接矩阵,因为如果23:A(2,3) == 1 相邻,那么3 也必须与2:A(3,2) == 1 相邻。您已经构建了邻接矩阵,使得每条边只有一个单向关系。

    您可以通过将 EdgeList 的另一列附加到 sparse 的每个输入来纠正此问题:

    A = sparse([EdgeList(:,1); EdgeList(:,2)], [EdgeList(:,2); EdgeList(:,1)], 1);
    

    或者,您可以转置您的A,并使用逻辑或 (|) 将其与 A 的初始版本组合以强制它是对称的。

    A = A.' | A;
    

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多