줄리아의 다차원 인덱스

줄리아의 다차원 인덱스

Multidimensional Index in julia

개요

줄리아에서는 다차원 배열에 참조할 수 있는 인덱스의 타입인 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

  1. https://docs.julialang.org/en/v1/base/arrays/#Base.IteratorsMD.CartesianIndex ↩︎

댓글