裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Re: Juliaをもっと速くしよう!

2022年03月28日 | Julia

Juliaをもっと速くしよう!
https://zenn.dev/ohno/articles/0ba7970d419898

「多次元配列のメモリ上の位置は Julia, R, Fortran では(Python と違い)列優先なので,bad よりは,内側の for ループでは左側の添字を変化させる good のほうが速い」と書かれている。筆者は Windows のようであり,確かに good のほうが速いという結果が提示されている。

私の環境は Mac mini M1 チップなのだが,両者の違いは殆どなかった。

function bad(arr)
    sum = 0
    for i in 1:size(arr)[1]
        for j in 1:size(arr)[2]
           sum += arr[i,j]
        end
    end
    return sum
end

function good(arr)
    sum = 0
    for j in 1:size(arr)[2]
        for i in 1:size(arr)[1]
           sum += arr[i,j]
        end
    end
    return sum
end

実は,例に挙げられた関数はもっと早くなる。

sum = 0

sum = zero(eltype(arr))

にするだけだ。 sum = 0.0 でもよい。

「Julia は動的型付け言語じゃないか。sum = 0 のどこが悪い?」という人もいると思うが,

sum = 0 だと,sum は Union{Float64, Int64} になってしまう。

sum = zero(eltype(arr)) なら Float64 だ。

余計なことをしないで済むぶん,後者のほうが 6 倍ほど速い

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia の小ネタ--044 R の rep() | トップ | Re: dplyrでカラム名や値を変... »
最新の画像もっと見る

コメントを投稿

Julia」カテゴリの最新記事