グラフの隣接頂点配列(速さ比較)
速度を比べっこ。
ランダムグラフのedgelist(links
)を作ってみて、「各頂点の隣接頂点の配列」を要素に持つ、入れ子配列(nbsimple
とnb
)を2通りで作ってみる。
links = round(Int64,10000*rand(50000,2)+1) links = vcat(links,hcat(links[:,2],links[:,1])) Ntot = maximum(links) Ktot = size(links,1) A = sparse(links[:,1],links[:,2],ones(Int64,Ktot),Ntot,Ntot) tic() nbsimple = [links[links[:,1].==lnode,2] for lnode = 1:Ntot] toc() # elapsed time: 5.303776352 seconds tic() nb = Array[] row = rowvals(A) for j = 1:Ntot push!(nb,Int64[row[i] for i in nzrange(A,j)]) end toc() # elapsed time: 0.058585485 seconds
上の方がシンプルだから使ってたけど、全然速さ違うなぁという話。
rowvals
とかnzrange
は公式ドキュメント参照: Arrays — Julia Language 0.4.6-pre documentation