줄리아에서 배열의 슬라이싱과 인덱싱
개요
줄리아는 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