Ben büyük seyrek bitişiklik matrisleri ben MATLAB ile işliyorum etrafında 1M düğümler ile var. Bu matrisleri ağ kenarı listelerine mümkün olduğunca verimli şekilde dönüştürmek istiyorum. Bu gösteren bir örnek komşuluk matrisi gibi:MATLAB'da büyük bitişik matrisleri kenar listelerine dönüştürmenin etkili yolu?
>> adj2edgeList_Alex(adj) ans = 0 0 0 2 1 2 1 3 2 2 3 1
Ben zamandır tezgahları yapmak zorunda Bu kod:
adj = 1 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0
Ve çıkış Ben burada bir ağ kenar listesi diyoruz.
function edge_list = adj2edgeList_Alex(graph) edge_num = length(logical(graph > 0)); edge_list = zeros(edge_num,2); row_ind = 1; for ii=1:size(graph,2) ind_temp = find(graph(ii,:)==1); if(isempty(ind_temp) == 0) ind_temp = ind_temp - 1; edges_iter = length(ind_temp); node_num = ii - 1; edge_list(row_ind:row_ind+edges_iter-1,:) = ... [(node_num)*ones(1,edges_iter);ind_temp]'; row_ind = row_ind + edges_iter; end end
Bunu hızlandırmak için bir değişiklik var mı? Daha iyi performans gösterebilen başka bir işlev veya araç kutusu?
Kodunuzu hiç profilinize eklediniz mi? Nerede yavaş hareket ettiğini görmek için profiler kullanın. Bu size ipuçları vermede yardımcı olacaktır. – John