줄리아에서 문자와 정수의 이퀄 오퍼레이터 == 속도 비교

줄리아에서 문자와 정수의 이퀄 오퍼레이터 == 속도 비교

결론

배열의 각 원소를 Equal Operator ==를 통해 비교하면 정수보다 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배 이상의 속도 저하가 발생한다.

환경

댓글