2016-08-19 13 views
2

私はMATLABで処理している約の10Mノードという大規模な疎な隣接行列を持っています。できるだけ効率的にマトリックスを隣接リストに変換したい。この説明するための例の隣接行列として:matlabは隣接リストを隣接リストに変換します

adj = 
    1  0  1 
    0  0  1 
    0  1  1 

、出力は次のとおりです。

ans = 
    0  0  2 
    1  2 
    2  1  2 

私は可能な限り効率的にそれをしたい、それを行うための任意の効率的な方法はありますか?

+0

を与えます。忘れてはならないのは、MATLAB(スパースを含む)の行列は列メジャーなので、それに応じて行列を配置する必要があります。 – beaker

答えて

0

各ノードに接続されているノードの数が異なるため、結果はベクトルのセル配列である必要があります。ここでそれを行う方法です:

[ii, jj] = find(adj); % row and col indices of connections 
y = accumarray(ii, jj-1 , [], @(x){sort(x.')}); % get all nodes connected to each node, 
    % sorted. Subtract 1 for 0-based indexing 

これは、スパース行列は、あなたがこの変換だろう何よりも隣接リストのより良い表現であることを行っている

>> celldisp(y) 
y{1} = 
    0  2 
y{2} = 
    2 
y{3} = 
    1  2 
関連する問題