多次元配列
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
など。
