Julia の Base.Matrix は、指定した型の要素を持つ2次元の密な配列で、Core.Array{T,2}
の別名である。数学の行列を表現するためによく使われる。データフレーム (Dataframe) とは異なり、単一のデータ型のみ格納できる。
Base.Matrix はコレクションの一種である。Julia 言語には、以下に示すコレクションがある。
コレクション | 順序 | 名前 | 値の重複 | 要素の追加・変更 |
---|---|---|---|---|
Core.Array | ✓ | ✗ | ✓ | ✓ |
Core.NamedTuple | ✓ | ✓ | ✓ | ✗ |
Core.Tuple | ✓ | ✗ | ✓ | ✗ |
Base.Dict | ✗ | ✓ | ✓ | ✓ |
Base.Matrix | ✓ | ✗ | ✓ | ✓ |
Base.Set | ✗ | ✗ | ✗ | ✗ |
Base.Vector | ✓ | ✗ | ✓ | ✓ |
Base.Matrix は以下に示す特徴を持つ。
上記の特徴は Core.Array と同じである。実際、Base.Matrix は Core.Array{T,2} の別名である。Base.Matrixは、一般的に「行列」と呼ばれる。
Matrix{T} <: AbstractMatrix{T}
行列の値は空白と改行で区切る。
julia> m = [
1 2
3 4
]
2×2 Matrix{Int64}:
1 2
3 4
改行の代わりにセミコロンでもよい。
julia> m = [1 2;3 4]
2×2 Matrix{Int64}:
1 2
3 4
要素の型を指定することができる。
julia> m = Int32[1 2;3 4]
2×2 Matrix{Int32}:
1 2
3 4
リスト内包表記とは、既存のリストから新たなリストを作成する表記法であり、数学における集合の内包的記法に準拠している。
集合の表し方には「外延的」と「内包的」という2種類の記法がある。
外延 (extension) 的な記法とは、すべての元(要素)を列挙して集合を表す方法である。Julia の Base.Matrix の場合、以下のように記述する。
julia> m = [2 3 4;3 4 5]
2×3 Matrix{Int64}:
2 3 4
3 4 5
内包 (intension) 的な記法とは、元が満たすべき条件を記述して集合を表す方法である。Julia の Base.Matrix の場合、以下のように記述する。
julia> m = [ x + y for x in 1:2, y in 1:3 ]
2×3 Matrix{Int64}:
2 3 4
3 4 5
上記の行列加算式を Julia で行う例を以下に示す。
julia> x = [
1 2
3 4
]
2×2 Matrix{Int64}:
1 2
3 4
julia> y = [
1 3
2 4
]
2×2 Matrix{Int64}:
1 3
2 4
julia> x + y
2×2 Matrix{Int64}:
2 5
5 8
上記の行列減算式を Julia で行う例を以下に示す。
julia> x = [
1 2
3 4
]
2×2 Matrix{Int64}:
1 2
3 4
julia> y = [
1 3
2 4
]
2×2 Matrix{Int64}:
1 3
2 4
julia> x - y
2×2 Matrix{Int64}:
0 -1
1 0
上記の行列乗算式を Julia で行う例を以下に示す。
julia> x = [
1 2
3 4
]
2×2 Matrix{Int64}:
1 2
3 4
julia> y = [
1 3
2 4
]
2×2 Matrix{Int64}:
1 3
2 4
julia> x * y
2×2 Matrix{Int64}:
5 11
11 25
Core.Array メソッドを使って配列を生成できる。
Array{T}(undef, dims)
Array{T,N}(undef, dims)
Array{T}(nothing, dims)
Array{T,N}(nothing, dims)
Array{T}(missing, dims)
Array{T,N}(missing, dims)
julia> a = Array{Int32, 2}(undef, 2, 3)
2×3 Matrix{Int32}:
0 0 0
0 0 0
Core.isa 関数を使うことで、与えられた型であるかどうかを判定できる。Base.Matrix は Core.Array{T,2} の別名であるため、比較する型が Core.Array でも真 (true) と判定される。また、スーパータイプである Base.AbstractMatrix でも真 (true) と判定される。
isa(x, type) -> Bool
型の判定を行う例を以下に示す。
julia> m = [1 2;3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> isa(m, Matrix)
true
julia> isa(m, Array)
true
julia> isa(m, AbstractMatrix)
true
julia> isa(m, Vector)
false
Core.isa 関数は「x isa type」のように、劣等演算子としても使用できる。
julia> m = [1 2;3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> m isa Matrix
true
julia> m isa Array
true
julia> m isa AbstractMatrix
true
julia> m isa Vector
false
Core.typeof 関数を使って、行列の要素の型を確認できる。
julia> m = [1 2;3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> typeof(m)
Matrix{Int64} (alias for Array{Int64, 2})
julia> m = Float32[1 2;3 4]
2×2 Matrix{Float32}:
1.0 2.0
3.0 4.0
julia> typeof(m)
Matrix{Float32} (alias for Array{Float32, 2})
Base.falses 関数を使うことで、すべての要素が false (0) である行列を生成できる。
julia> m = falses(3, 2)
3×2 BitMatrix:
0 0
0 0
0 0
Base.fill 関数を使うことで、すべての要素が同じ値である行列を生成できる。
julia> m = fill(-1, 2, 3)
2×3 Matrix{Int64}:
-1 -1 -1
-1 -1 -1
Base.findall メソッドを使うことで、Base.Matrix に含まれる true の要素だけを抽出することができる。
julia> m = [true false;true true]
2×2 Matrix{Bool}:
1 0
1 1
julia> findall(m)
3-element Vector{CartesianIndex{2}}:
CartesianIndex(1, 1)
CartesianIndex(2, 1)
CartesianIndex(2, 2)
Base.findall メソッドを使うことで、Base.Matrix に含まれる要素のうち、引数に渡した関数の戻り値が true になる要素だけを抽出することができる。
julia> m = [1 2;3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> findall(isodd, m)
2-element Vector{CartesianIndex{2}}:
CartesianIndex(1, 1)
CartesianIndex(2, 1)
julia> findall(iseven, m)
2-element Vector{CartesianIndex{2}}:
CartesianIndex(1, 2)
CartesianIndex(2, 2)
Base.ones 関数を使うことで、すべての要素が 1 である行列を生成できる。
julia> m = ones(Float32, 3, 2)
3×2 Matrix{Float32}:
1.0 1.0
1.0 1.0
1.0 1.0
Base.sum 関数を使って、Base.Matrix 各要素の合計値を求めることができる。
julia> sum([1 2;3 4])
10
Base.trues 関数を使うことで、すべての要素が true (1) である行列を生成できる。
julia> m = trues(2, 3)
2×3 BitMatrix:
1 1 1
1 1 1
Base.zeros 関数を使うことで、すべての要素が 0 である行列を生成できる。
julia> m = zeros(Float32, 2, 3)
2×3 Matrix{Float32}:
0.0 0.0 0.0
0.0 0.0 0.0
Julia の REPL で ?
キーを押すと、HELP モードになる。HELP モードの REPL で Matrix
と入力すると、ヘルプが表示される。
julia> ?
help?> Matrix
search: Matrix BitMatrix DenseMatrix StridedMatrix AbstractMatrix
Matrix{T} <: AbstractMatrix{T}
Two-dimensional dense array with elements of type T, often used to represent a mathematical matrix. Alias
for Array{T,2}.
See also fill, zeros, undef and similar for creating matrices.
──────────────────────────────────────────────────────────────────────────────────────────────────────────
Matrix{T}(undef, m, n)
Construct an uninitialized Matrix{T} of size m×n.
Examples
≡≡≡≡≡≡≡≡≡≡
julia> Matrix{Float64}(undef, 2, 3)
2×3 Array{Float64, 2}:
2.36365e-314 2.28473e-314 5.0e-324
2.26704e-314 2.26711e-314 NaN
julia> similar(ans, Int32, 2, 2)
2×2 Matrix{Int32}:
490537216 1277177453
1 1936748399
──────────────────────────────────────────────────────────────────────────────────────────────────────────
Matrix{T}(nothing, m, n)
Construct a Matrix{T} of size m×n, initialized with nothing entries. Element type T must be able to hold
these values, i.e. Nothing <: T.
Examples
≡≡≡≡≡≡≡≡≡≡
julia> Matrix{Union{Nothing, String}}(nothing, 2, 3)
2×3 Matrix{Union{Nothing, String}}:
nothing nothing nothing
nothing nothing nothing
──────────────────────────────────────────────────────────────────────────────────────────────────────────
Matrix{T}(missing, m, n)
Construct a Matrix{T} of size m×n, initialized with missing entries. Element type T must be able to hold
these values, i.e. Missing <: T.
Examples
≡≡≡≡≡≡≡≡≡≡
julia> Matrix{Union{Missing, String}}(missing, 2, 3)
2×3 Matrix{Union{Missing, String}}:
missing missing missing
missing missing missing
JuliaLang.org contributors 2023. Julia Documentation