ジュリアの多次元インデックス
概要
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)
をそのまま使えば良さそうだが、プログラミングに慣れている人なら、この方法に問題があることがわかるだろう。一般的に、このような二次元配列、特に行列を参照する時には、pt[1],pt[2]
のように、二つの整数をはっきりと分けて入れなければならない。
julia> pt = CartesianIndex(3,4)
CartesianIndex(3, 4)
julia> M[pt]
9
ありがたいことに、Juliaではこのインデックスを丸ごと渡すことができる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