줄리아의 다차원 인덱스
개요
줄리아에서는 다차원 배열에 참조할 수 있는 인덱스의 타입인 CatesianIndex
를 제공한다1. 당연히 카티션catesian이라는 명명은 집합의 곱인 데카르트 곱에서 온 것이다.
코드
julia> M = rand(0:9, 4,4)
4×4 Matrix{Int64}:
9 3 7 0
8 6 2 1
3 8 4 9
5 6 8 2
가령 위와 같은 행렬 M
의 3행 4열 원소인 9
에 접근하고 싶다고 가정해보자.
julia> pt = (3,4)
(3, 4)
julia> M[pt]
ERROR: LoadError: ArgumentError: invalid index: (3, 4) of type Tuple{Int64, Int64}
julia> M[pt[1],pt[2]]
9
직관적으로는 튜플 pt = (3,4)
을 바로 넣으면 될 것도 같지만, 프로그래밍에 익숙한 사람이라면 오히려 이 방식에 문제가 있음을 알 수 있을 것이다. 보편적으로 위와 같은 2차원 배열, 특히 행렬을 참조할 때는 pt[1],pt[2]
처럼 그냥 두 개의 정수를 정직하게 찢어넣어줘야 한다.
julia> pt = CartesianIndex(3,4)
CartesianIndex(3, 4)
julia> M[pt]
9
고맙게도 줄리아에는 이 인덱스 자체를 통째로 넘겨줄 수 있게끔 CatesianIndex
가 제공된다. 튜플 자체를 CatesianIndex
로 만들어서 바로 참조하면 우리가 원하던 결과를 얻는다.
전체코드
M = rand(0:9, 4,4)
pt = (3,4)
M[pt]
M[pt[1],pt[2]]
pt = CartesianIndex(3,4)
M[pt]
환경
- OS: Windows
- julia: v1.7.0