MATLAB移民のためのJulia tips

MATLAB移民のためのJulia tips

何も考えずに速く計算できないのならば、何もやりたくない。

グラフの隣接頂点配列(速さ比較)

速度を比べっこ。

ランダムグラフのedgelist(links)を作ってみて、「各頂点の隣接頂点の配列」を要素に持つ、入れ子配列(nbsimplenb)を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

上の方がシンプルだから使ってたけど、全然速さ違うなぁという話。