多次元配列

2026年3月29日
1 分

Juliaは多次元配列をサポートしている。 型は Array{T,N}T は要素の型、N は次元の数を表す。

また、N=1 の時には Vector、N=2の時には Matrix という別名がついている。

Vector は前にも出てきた。

julia> [1,2,3]
3-element Vector{Int64}:
 1
 2
 3

Matrix のリテラルは少し書き方が変わっていて、行の要素をスペースで区切り、行自体はセミコロンで区切る。

julia> [1 2 3; 4 5 6]
2×3 Matrix{Int64}:
 1  2  3
 4  5  6

Array{T,N} は内部的には1次元の配列で、次元に関するメタデータみたいなものを持っている。 reshape 関数を使えば1次元配列から多次元配列に簡単に変換できる。 次の例では、2×3 の2次元配列(つまり Matrix)に変換している。

julia> reshape([1,2,3,4,5,6,], 2, 3)
2×3 Matrix{Int64}:
 1  3  5
 2  4  6

注意が必要なのは、上のリテラルの例とは違って、行より列が先に並ぶこと。つまり、1番目の次元が列で、行は2番目の次元ということになる。これを columun-major order と呼ぶ。

配列のリテラルの代わりに、範囲オブジェクトを使うこともできる。ついでに3次元の例にしてみた。

julia> reshape(1:12, 3, 2, 2)
3×2×2 reshape(::UnitRange{Int64}, 3, 2, 2) with eltype Int64:
[:, :, 1] =
 1  4
 2  5
 3  6

[:, :, 2] =
 7  10
 8  11
 9  12

へぇ、こんなふうに表示されるんだ。

初期化する方法はこれ以外にもある。少し試してみよう。

すべて 0

julia> zeros(Int, 3, 3)
3×3 Matrix{Int64}:
 0  0  0
 0  0  0
 0  0  0

すべて 1

julia> ones(Float64, 3, 3)
3×3 Matrix{Float64}:
 1.0  1.0  1.0
 1.0  1.0  1.0
 1.0  1.0  1.0

一様乱数。

julia> rand(Float64, 3, 3)
3×3 Matrix{Float64}:
 0.942208  0.424127  0.987974
 0.478866  0.469247  0.895709
 0.738079  0.545029  0.40394

特定の値で埋める。

julia> fill(2.5, 3, 3)
3×3 Matrix{Float64}:
 2.5  2.5  2.5
 2.5  2.5  2.5
 2.5  2.5  2.5

など。