2013-04-24 4 views
5

私は大きなスパース隣接行列と約1MノードMATLABで処理しています。これらの行列をネットワークエッジリストにできるだけ効率的に変換したいと思います。例えば、隣接行列として、この説明します大きな隣接行列をMATLABのエッジリストに変換する効率的な方法は?

 
adj = 
    1  0  1  0 
    0  0  1  1 
    0  0  1  0 
    0  1  0  0 

をそして、私はここにネットワークエッジリストを呼び出す出力は、次のとおりです。私はそれが時間のために失速しなければならない

 
>> adj2edgeList_Alex(adj) 
ans = 
    0  0 
    0  2 
    1  2 
    1  3 
    2  2 
    3  1 

このコード。

これをスピードアップするための変更はありますか?より良い性能を発揮する別の機能やツールボックス?

+0

あなたのコードをまったくプロファイルしましたか?プロファイラを使用して、ゆっくりと動作する場所を確認します。それはあなたに手がかりを与えるのに役立ちます。 – John

答えて

10

あなたはfind()使用することができます:1からMATLABインデックスが0でないことを

[r,c] = find(adj) 
edges = [r,c]; 

注意をしていますが、単にedges-1でリベースすることができます。

関連する問題