ジュリアでの文字と整数の等価オペレータ==の速度比較
結論
配列の各要素を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)
上のコードは、整数と文字で構成された配列で1
とS
がどこにあるかを特定するプログラムだ。整数か文字列かの違いを除いて、全て正確に同じだが、時間の消費はほぼ二倍の大きな差がある。したがって、コード最適化の過程で一般的に使用される方法なので、可能な限り文字を使用することが推奨される。
追加研究
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