2016-07-03 4 views
1

問題隣接行列は、私は私のEdgeListから無向グラフを作成したい

対称でなければなりません。しかし、私のEdgelistは密な二重配列ではありません。私はゼロを含むすべてのエッジの接続を枯渇が、私はこの問題は、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 

だから私は、隣接行列を作成しよう、しようとするのを期待して私は

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

を使用source is not a dense double arrayエラー

コードを防ぐために、今私は

次のエラーを取得します

隣接行列は対称でなければなりません。

私はこのようなデータセットからグラフを作成する方法が不足しています。

答えて

3

それが言うようにあなたは対称であるためにあなたの隣接行列を作成する必要があり、23に隣接している場合ので:A(2,3) == 1、そして32に隣接していなければならない:A(3,2) == 1。あなたは、各エッジに対して一方向の関係しか持てないように、あなたの隣接行列を構築しました。あなたはどちらかsparseへの入力のそれぞれにEdgeListの他の列を追加することによって、これを修正することができます

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

代わりに、あなたはあなたのAを転置し、論理を使用してAの最初のバージョンとそれを組み合わせることができます(|)を強制的に対称にします。

A = A.' | A; 
関連する問題