줄리아에서 빈 배열 만드는 법

줄리아에서 빈 배열 만드는 법

코드

크기 지정

julia> empty = Array{Float64, 2}(undef, 3, 4)
3×4 Array{Float64,2}:
 3.39519e-313  3.18299e-313  4.66839e-313  1.061e-313
 4.03179e-313  5.51719e-313  1.6976e-313   4.24399e-314
 2.97079e-313  4.66839e-313  7.00259e-313  5.0e-324

위의 코드를 실행시키면 빈 배열이 만들어진다. 간혹 1.76297e-315처럼 이상한 값이 들어가는 것처럼 보이기도 하지만 이는 0에 아주 가까운 값으로써 초기화엔 큰 문제가 없다.

Array{X, Y}(undef, ...)는 자료형 XY차원 배열을 자료형에 해당하는 미정값으로 사이즈 ...만큼 채운 배열이 된다. 여기서 핵심은 undef다.

가변 배열

1차원 배열의 경우에는 괄호 안에 아무것도 넣지 않음으로써 간단하게 빈 배열을 만들 수 있다.

julia> empty = Array{Float64, 1}()
Float64[]

julia> empty = Array{Float64, 2}()
ERROR: MethodError: no method matching Array{Float64,2}()
Closest candidates are:
  Array{Float64,2}(::UndefInitializer, ::Int64, ::Int64) where T at boot.jl:408
  Array{Float64,2}(::UndefInitializer, ::Int64...) where {T, N} at boot.jl:412
  Array{Float64,2}(::UndefInitializer, ::Tuple{Int64,Int64}) where T at boot.jl:416
  ...
Stacktrace:
 [1] top-level scope at REPL[85]:1

단 같은 방법으로 2차원 배열을 만들려고 하면 위와 같이 MethodError가 발생한다. 물론 자연스러운 2차원 배열이 아니라도 다음과 같이 1차원 배열의 1차원 배열을 만드는 식으로 빈 배열을 만들 수는 있지만, 속도 측면에서는 네이티브한 문법 그대로 쓰기를 권장한다.

julia> empty = Array{Array{Float64, 1}, 1}()
Array{Float64,1}[]

더 간단한 방법

다음과 같이 각괄호를 사용하면 더욱 간편하게 배열을 만들 수 있다.

julia> empty = Float64[]
Float64[]

julia> empty = Array{Float64, 1}[]
Array{Float64,1}[]

julia> empty = Array{Float64, 2}[]
Array{Float64,2}[]

환경

댓글