###多次元配列 (2)様々な演算や関数 (書き方例)
◆多次元配列の演算
▼四則演算
# AとBの加算
A + B
# AとBの積
A * B
# Aの定数倍(cは定数またはスカラー値)
c * A
# AとBの右除算(右からBの逆行列を掛ける)
A / B
# AとBの左除算(左からAの逆行列を掛ける)
A \ B
▼ドット演算
# AとBの要素ごとの加算
A .+ B
# Aとcの加算
A .+ c
# AとBの要素ごとの減算
A .- B
# Aとcの減算
A .- c
# AとBの要素ごとの掛算
A .* B
# Aとcの掛算
A .* c
# AとBの要素ごとの割算
A ./ B
# Aとcの割算
A ./ c
◆様々な関数(情報の取得)
# Aの要素の型
eltype(A)
# Aの要素の数
length(A)
# Aの次元数
ndims(A)
# Aのサイズ
size(A)
# n番目の次元のAのサイズ
size(A,n)
# Aのストライド
strides(A)
# n番目の次元のAのストライド
stride(A,n)
◆ブロードキャスティング(型が異なる配列同士の演算)
broadcast(f, args...)
# 加算の例
broadcast(+, A, C)
◆変換(map)、集約(reduce)、フィルタリング(filter)、その他の演算
▼変換(map)
map(f, A)
# 各要素を2乗する例
map(x -> x^2, A)
▼集約(reduce)
reduce(f, A)
# 配列Aの要素を集約(加算)
reduce(+, A)
▼フィルタリング(filter)
filter(f, A)
# 0.5以上の要素を抽出(フィルタリング)
filter(x -> x >= 0.5, A)
▼その他の演算
# 要素の最大値
maximum(A)
# 要素の最小値
minimum(A)
# 要素の和
sum(A)
# 要素の最大値のインデックス番号
argmax(A)
# 要素の最小値のインデックス番号
argmin(A)
##解説
多次元配列には以下のような機能があります。
①多次元配列の演算
②様々な関数(情報の取得)
③ブロードキャスティング(異なる配列同士の演算)
④変換(map)、集約(reduce)、フィルタリング(filter)、その他の演算
####①多次元配列の演算
解説を見る
多次元配列の基本的な四則演算とドット演算について説明します。
基本的な四則演算
以下に四則演算をまとめます。
No | 式 | 内容 |
---|---|---|
(1) | A + B | AとBの加算 |
(2) | A - B | AとBの減算 |
(3) | A * B | AとBの積 |
(4) | c * A | Aの定数倍 |
(5) | A / B | AとBの右除算 |
(6) | A \ B | AとBの左除算 |
以下の解説で、A,Bは次のような2x2次元配列とします。
A = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix},
B = \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}
(1)A + B(AとBの加算)
A + B = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} + \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix} = \begin{pmatrix} 1 & 3 \\ 3 & 3 \end{pmatrix}
(2)A - B(AとBの減算)
A - B = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} - \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix} = \begin{pmatrix} 1 & 1 \\ -1 & 3 \end{pmatrix}
(3)A * B(AとBの積)
A * B = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix} = \begin{pmatrix} 4 & 1 \\ 6 & 1 \end{pmatrix}
(4)c * A(Aの定数倍)
Aの各要素を定数倍(スカラー倍)します。
c * A = \begin{pmatrix} c × 1 & c × 2 \\ c × 1 & c × 3 \end{pmatrix}\\
例:c = 2とすると、\\
2 * A = \begin{pmatrix} 2 & 4 \\ 2 & 6 \end{pmatrix}
(5)A / B(AとBの右除算)
行列演算には割り算(除算)はありませんが、逆行列を用いることで割り算と同じような演算を行います。
$A$に対する$B$の右除算とは、$A$に対して右から$B$の逆行列をかけることで、$B$で割ったように計算することです。
B^{-1}=\frac{1}{2}\begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}を用いて\\
A * B^{-1} = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} \frac{1}{2}\begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}\\ = \frac{1}{2}\begin{pmatrix} 4 & 1 \\ 6 & 1\end{pmatrix}\\ = \begin{pmatrix} 2 & 0.5 \\ 3 & 0.5 \end{pmatrix}
(6)A \ B(AとBの左除算)
右除算と同様に逆行列を用います。
$B$に対する$A$の左除算とは、$B$に対して左から$A$の逆行列をかけることで、$A$で割ったように計算することです。
A^{-1}=\begin{pmatrix} 3 & -2 \\ -1 & 1 \end{pmatrix}を用いて\\
A^{-1} * B = \begin{pmatrix} 3 & -2 \\ -1 & 1 \end{pmatrix} \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}\\ = \begin{pmatrix} -4 & 3 \\ 2 & -1\end{pmatrix}
ドット演算
以下にドット演算をまとめます。cは定数(スカラー)です。
No | 式 | 内容 |
---|---|---|
(7) | A .+ B | AとBの要素ごとの加算 |
(8) | A .+ c | Aとcの加算 |
(9) | A .- B | AとBの要素ごとの減算 |
(10) | A .- c | Aとcの減算 |
(11) | A .* B | AとBの要素ごとの掛算 |
(12) | A .* c | Aとcの掛算 |
(13) | A ./ B | AとBの要素ごとの割算 |
(14) | A ./ c | Aとcの割算 |
(7)A .+ B(AとBの要素ごとの加算)
A.+B = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} + \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}\\= \begin{pmatrix} 1+0 & 2+1 \\ 1+2 & 3+0 \end{pmatrix}\\
= \begin{pmatrix} 1 & 3 \\ 3 & 3 \end{pmatrix}
(8)A .+ c(Aとcの加算)
cは定数(スカラー)とします。
A.+c = \begin{pmatrix} 1+c & 2+c \\ 1+c & 3+c \end{pmatrix}\\
c=2とすると、\\
=\begin{pmatrix} 1+2 & 2+2 \\ 1+2 & 3+2 \end{pmatrix}\\
= \begin{pmatrix} 3 & 4 \\ 3 & 5 \end{pmatrix}
(9)A .- B(AとBの要素ごとの減算)
A.-B = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} - \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}\\= \begin{pmatrix} 1-0 & 2-1 \\ 1-2 & 3-0 \end{pmatrix}\\
= \begin{pmatrix} 1 & 1 \\ -1 & 3 \end{pmatrix}
(10)A .- c(Aとcの減算)
cは定数(スカラー)とします。
A.-c = \begin{pmatrix} 1-c & 2-c \\ 1-c & 3-c \end{pmatrix}\\
c=2とすると、\\
=\begin{pmatrix} 1-2 & 2-2 \\ 1-2 & 3-2 \end{pmatrix}\\
= \begin{pmatrix} -1 & 0 \\ -1 & 1 \end{pmatrix}
(11)A . B(AとBの要素ごとの掛算)*
A.*B=\begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} .* \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}\\= \begin{pmatrix} 1×0 & 2×1 \\ 1×2 & 3×0 \end{pmatrix}\\= \begin{pmatrix} 0 & 2 \\ 2 & 0 \end{pmatrix}
(12)A . c(Aとcの掛算)*
cは定数(スカラー)とします。
A.*c=\begin{pmatrix} 1×c & 2×c \\ 1×c & 3×c \end{pmatrix}\\
c=2とすると、\\
= \begin{pmatrix} 1×2 & 2×2 \\ 1×2 & 3×2 \end{pmatrix}\\
= \begin{pmatrix} 2 & 4 \\ 2 & 6 \end{pmatrix}
(13)A ./ B(AとBの要素ごとの割算)
A./B=\begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} ./ \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}\\= \begin{pmatrix} 1÷0 & 2÷1 \\ 1÷2 & 3÷0 \end{pmatrix}\\= \begin{pmatrix} * & 2 \\ 0.5 & * \end{pmatrix}\\
*は0除算のため値無し
(14)A . c(Aとcの割算)*
cは定数(スカラー)とします。
A./c=\begin{pmatrix} 1÷c & 2÷c \\ 1÷c & 3÷c \end{pmatrix}\\
c=2とすると、\\
= \begin{pmatrix} 1÷2 & 2÷2 \\ 1÷2 & 3÷2 \end{pmatrix}\\
= \begin{pmatrix} 0.5 & 1 \\ 0.5 & 1.5 \end{pmatrix}
####②様々な関数(情報の取得)
解説を見る
主要な関数を以下にまとめました。
Aを多次元配列とします。
No | 関数 | 内容 |
---|---|---|
(1) | eltype(A) | Aの要素の型 |
(2) | length(A) | Aの要素の数 |
(3) | ndims(A) | Aの次元数 |
(4) | size(A) | Aのサイズ |
(5) | size(A,n) | n番目の次元のAのサイズ |
(6) | strides(A) | Aのストライド |
(7) | stride(A,n) | n番目の次元のAのストライド |
(2) length(A)
Aの要素数を取得します。
下例では、3次元配列で各次元の要素が2個、3個、3個なので、全要素数は18個となります。
(4) size(A)
サイズ(次元ごとの要素数)を取得します。
1次元目の要素は2個、2次元目の要素は3個、3次元目の要素は4個となります。
(5) size(A, n)
指定した次元の要素数を取得します。
下例では2次元目の要素数を取得しています。
(6) strides(A)
1次元配列上で要素がいくつ離れているか(1次元目に要素がいくつ入っているか)を取得します。
####③ブロードキャスティング
解説を見る
ブロードキャスティングとは、型(サイズ)の異なる配列同士の演算を行えるようにする仕組みです。ブロードキャスティングとして、以下の関数が使用できます。
broadcast(f, args...)
(下例) broadcast(+, A, C)
代表的な処理を2例示しますが、その他にも様々な処理がありますので、詳細は公式ドキュメントをご参照下さい。
(1)多次元配列Aに対して、サイズ(1行1列)の配列を加算する場合
配列Aを4行5列の2次元配列とします。これに対して配列C(1行1列の2次元配列)を加算した場合、配列Cは自動的にAと同じサイズに拡張され、演算が行われます。
実行例
(2)多次元配列Aに対して、サイズ(1行複数列)の配列を加算する場合
このような場合でもブロードキャスティングが可能です。
例えば、サイズが1行3列の配列DをAに加算する際、配列Dと配列Aの列数が等しいので加算することができます。
ブロードキャスティングの条件に以下が挙げられます。
・配列同士の各次元の大きさが同じ
・次元の大きさが異なる場合、片方のサイズが1
実行例
####④変換(map)、集約(reduce)、フィルタリング(filter)、その他の演算
解説を見る
配列の各要素に対して、変換や集約やフィルタリングができます。
(1)変換(map)
配列の各要素に対して処理を適用します。
適用する処理をfとすると、以下のように使用することができます。
map(f, A)
(2)集約(reduce)
各要素を集約するような何らかの処理を行います。
適用する処理をfとすると、以下のように使用することができます。
reduce(f, A)
(3)フィルタリング(filter)
要素に対して条件評価fを追加して抽出します。
filter(f, A)
下例では、各要素の値が0.5以上の要素を抽出(フィルタリング)しています。
(4)その他の演算
(4-1) 配列Aの要素のうち、最大の要素を取得します。
maximum(A)
(4-2) 配列Aの要素のうち、最小の要素を取得します。
minimum(A)
(4-3) 全ての要素の和を取得します。
sum(A)
(4-4) 配列Aの要素のうち、最大値の要素のインデックス番号
argmax(A)
(4-5) 配列Aの要素のうち、最小値の要素のインデックス番号
argmim(A)
##もくじ
Julia早引きノート[01]変数・定数の使い方
Julia早引きノート[02]算術式、演算子
[Julia早引きノート[03]複素数]
(https://qiita.com/ttabata/items/225c77a4d71fafc3e482)
Julia早引きノート[04]正規表現
....
もくじを開く
##関連情報
Julia - 公式ページ
https://julialang.org/
Julia - 日本語公式ドキュメント
https://julia-doc-ja.readthedocs.io/ja/latest/index.html
初めてのJuliaとインストール (Windows & Linux)
https://qiita.com/ttlabo/items/b05bb43d06239f968035
Julia - Mathematics
https://docs.julialang.org/en/v1/base/math/
##ご意見など
ご意見、間違い訂正などございましたらお寄せ下さい。