邻接矩阵必须是对称的

时间:2016-07-03 13:02:43

标签: matlab graph

问题

我想从我的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);

现在我收到下一个错误

  

邻接矩阵必须是对称的。

我没有想法如何从这样的数据集创建图表,任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

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

您可以通过将EdgeList的其他列附加到sparse的每个输入来更正此问题:

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

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

A = A.' | A;