logo

ジュリアでの文字と整数の等価オペレータ==の速度比較 📂ジュリア

ジュリアでの文字と整数の等価オペレータ==の速度比較

結論

配列の各要素をEqualオペレータ==で比較すると、整数よりもCharの方が早い。

速度比較

julia> integer = rand(1:5, N); print(typeof(integer))
Array{Int64,1}
julia> character = rand(['S','E','I','R','D'], N); print(typeof(character))
Array{Char,1}
julia> @time integer .== 1;
  0.009222 seconds (6 allocations: 1.196 MiB)

julia> @time character .== 'S';
  0.005266 seconds (7 allocations: 1.196 MiB)

上のコードは、整数と文字で構成された配列で1Sがどこにあるかを特定するプログラムだ。整数か文字列かの違いを除いて、全て正確に同じだが、時間の消費はほぼ二倍の大きな差がある。したがって、コード最適化の過程で一般的に使用される方法なので、可能な限り文字を使用することが推奨される。

追加研究

julia> string = rand(["S","E","I","R","D"], N); print(typeof(string))
Array{String,1}
julia> @time string .== "S";
  0.072692 seconds (7 allocations: 1.196 MiB)

当然ながら、文字characterではなく文字列stringを使用すると、10倍以上の速度の低下が発生する。

環境

  • OS: Windows
  • julia: v1.5.0