줄리아에서 배열의 슬라이싱과 인덱싱

줄리아에서 배열의 슬라이싱과 인덱싱

Slicing and indexing in julia

코드

줄리아는 R, 파이썬, 매트랩의 장점이 모두 섞여있는 언어다. 배열은 프로그래밍의 근간이 되는만큼 그 활용에서 여러 언어들의 흔적을 찾아볼 수 있다.

행렬

julia> M = [1. 2. ; 3. 4.]
2×2 Array{Float64,2}:
 1.0  2.0
 3.0  4.0

julia> size(M)
(2, 2)

julia> length(M)
4

행렬의 경우 매트랩의 문법과 거의 똑같이 정의하고 거의 똑같이 사용할 수 있다. size() 함수는 매트랩과 똑같이 쓰이고, 파이썬에서 numpy 패키지의 프로퍼티 .shape에 해당하는 기능을 한다. length()는 매트랩과 달리 성분 전체의 수를 반환한다.

julia> x = [[1,2,3,4] for _ in 1:4]; x
4-element Array{Array{Int64,1},1}:
 [1, 2, 3, 4]
 [1, 2, 3, 4]
 [1, 2, 3, 4]
 [1, 2, 3, 4]

슬라이싱

반복문을 배열 안에 배치해서 쓰는 것은 파이썬에서 흔히 볼 수 있는 용법이다. 이를 통해 R에서의 rep() 함수 등을 비슷하게 재현해낼 수 있다.

julia> y = [3,2,5,1,4]
5-element Array{Int64,1}:
 3
 2
 5
 1
 4

julia> y[[4,2,1,5,3]]
5-element Array{Int64,1}:
 1
 2
 3
 4
 5

julia> y[3:end]
3-element Array{Int64,1}:
 5
 1
 4

julia> y[3:4] .= -1; y
5-element Array{Int64,1}:
  3
  2
 -1
 -1
  4

인덱싱

인덱싱은 R과 비슷하게 인덱스의 배열을 주면 그 순서대로 출력해준다. 배열의 마지막 인덱스를 end로 표현하는 것을 보아 슬라이싱은 매트랩에서 영향을 받았음을 알 수 있다. 가장 마지막으로, .=를 통해 3, 4번째 원소에 -1을 직접 대입하는 것 역시 매트랩과 흡사하다.

julia> x = [1 2; 3 4]
2×2 Array{Int64,2}:
 1  2
 3  4

julia> x[1,:]
2-element Array{Int64,1}:
 1
 2

julia> x[[1],:]
1×2 Array{Int64,2}:
 1  2

julia> x[1,1] = -1; x
2×2 Array{Int64,2}:
 -1  2
  3  4

특이한 것은 인덱싱을 어떻게 하느냐에 따라 결과가 다를 수 있다는 것이다. 개념적으로는 같은 것을 넣고 같은 결과가 나올지라도 들어갈 때 원소가 들어가면 결과도 원소로, 들어갈 때 배열이 들어가면 결과도 배열로 얻을 수 있다. 이는 줄리아를 사용하기 어렵게 만드는 동시에 고급스러운 기능을 구현하는데에 큰 도움이 되기도 한다.

환경

  • OS: Windows
  • julia: v1.5.0
댓글