統計や機械学習に関するプログラミングではPython
やR
が用いられることが多いですが、近年Julia
も注目を集めています。そこで当シリーズではJulia
の基本構文からライブラリの用い方などについて取りまとめます。当記事ではJulia
の多次元配列の生成について取りまとめを行いました。
・Julia
入門
https://www.hello-statisticians.com/julia
・Julia 1.8 Documentation
https://docs.julialang.org/en/v1/
Contents
多次元配列の生成
zeros・ones関数を用いた多次元配列の生成
zeros
関数を用いることで下記のように多次元配列を生成することができます。
x1 = zeros(2,3)
x2 = zeros(Int64,2,3)
println(x1)
println(typeof(x1))
println("===")
println(x2)
println(typeof(x2))
・実行結果
[0.0 0.0 0.0; 0.0 0.0 0.0]
Matrix{Float64}
===
[0 0 0; 0 0 0]
Matrix{Int64}
同様にones
関数を用いることで下記のように多次元配列を生成することができます。
x1 = ones(2,3)
x2 = ones(Int64,2,3)
println(x1)
println(typeof(x1))
println("===")
println(x2)
println(typeof(x2))
・実行結果
[1.0 1.0 1.0; 1.0 1.0 1.0]
Matrix{Float64}
===
[1 1 1; 1 1 1]
Matrix{Int64}
rand・randn関数を用いた多次元配列の生成
一様分布$U(0,1)$に基づく乱数の生成を行うrand
関数を用いた配列の生成は下記のように行うことができます。
using Random
Random.seed!(1234)
x1 = rand(5)
x2 = rand(2,3)
println(x1)
println(x2)
・実行結果
[0.32597672886359486, 0.5490511363155669, 0.21858665481883066, 0.8942454282009883, 0.35311164439921205]
[0.39425536741585077 0.7955469475347194 0.7484150218874741; 0.9531246272848422 0.4942498668904206 0.5782319465613976]
上記のRandom.seed!(1234)
は値の再現ができるように乱数のseed
の固定を行いました。同様に標準正規分布$\mathcal{N}(0,1)$に基づく乱数の生成を行うrandn
関数を用いた配列の生成は下記のように行うことができます。
using Random
Random.seed!(1234)
x1 = randn(5)
x2 = randn(2,3)
println(x1)
println(x2)
・実行結果
[-0.3597289068234817, 1.0872084924285859, -0.4195896169388487, 0.7189099374659392, 0.4202471777937789]
[-0.685670902276119 0.3248927294469157 0.46169497427896844; 2.0547630560640364 -0.30490125519643224 -0.8449577163759787]
配列の生成にあたって抑えておくとよい関数
配列の生成にあたって抑えておくと良い関数について下記に取りまとめました。
関数 | 概要 |
zeros(T,dims...) | 全ての値が0 の配列 |
ones(T,dims | 全ての値が1の配列 |
rand(T,dims | それぞれの要素の値が一様分布に基づく配列 |
randn(T,dims | それぞれの要素の値が標準正規分布に基づく配列 |
fill(x,dims | 全ての値がx の配列 |
上記のT
は型、dims
は配列の次元にそれぞれ対応します。型を表すT
を省略する場合はFloat64
型が適用されることが多く、同様に配列の次元を表すdims
を省略する場合は0
次元のスカラー値に対応するサイズが1
×1
の配列が生成されます。
print(typeof(zeros()))
・実行結果
Array{Float64, 0}
Juliaの多次元配列の特徴
多次元配列とArray型
Julia
では多次元配列は基本的にArray{T,N}
型で定義されます。T
は要素の型、N
は配列の次元の数にそれぞれ対応します。Vector{T}
型やMatrix{T}
型も存在する一方でそれぞれArray{T,1}
型とArray{T,2}
型と同義であることは抑えておくと良いです。
多次元配列のインデックス
Julia
の多次元配列のインデックスは1
から始まることに注意が必要です。NumPy
では0
から始まるので、Julia
を用いる際に注意が必要です。
column-major order
$$
\large
\begin{align}
A = \left(\begin{array}{ccc} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{array} \right)
\end{align}
$$
上記のような配列を定義する際に、決定する必要があるのが要素を並べる順番です。NumPy
の多次元配列は$a_{11} \to a_{12} \to a_{13}$のように行から要素を並べるrow-major order
であるのに対し、Julia
では$a_{11} \to a_{21} \to a_{31}$のように列から要素を並べるcolumu-major order
であることは抑えておくと良いです。row-major order
かcolumu-major order
によって行列が転置されるので、注意が必要です。
参考
・Julia 1.8 Documentation
https://docs.julialang.org/en/v1/