多次元配列 (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)、その他の演算
①多次元配列の演算
多次元配列の基本的な四則演算とドット演算について説明します。 基本的な四則演算 以下の解説で、A,Bは次のような2x2次元配列とします。 (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の左除算) ドット演算 (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の割算)解説を見る
以下に四則演算をまとめます。
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 = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix},
B = \begin{pmatrix} 0 & 1 \\ 2 & 0 \end{pmatrix}
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}
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}
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}
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}
行列演算には割り算(除算)はありませんが、逆行列を用いることで割り算と同じような演算を行います。
$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}
右除算と同様に逆行列を用います。
$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の割算
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}
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}
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}
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}
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}
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}
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除算のため値無し
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}
②様々な関数(情報の取得)
主要な関数を以下にまとめました。 (2) length(A) (4) size(A) (5) size(A, n) (6) strides(A)解説を見る
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のストライド
Aの要素数を取得します。
下例では、3次元配列で各次元の要素が2個、3個、3個なので、全要素数は18個となります。
サイズ(次元ごとの要素数)を取得します。
1次元目の要素は2個、2次元目の要素は3個、3次元目の要素は4個となります。
指定した次元の要素数を取得します。
下例では2次元目の要素数を取得しています。
1次元配列上で要素がいくつ離れているか(1次元目に要素がいくつ入っているか)を取得します。
③ブロードキャスティング
ブロードキャスティングとは、型(サイズ)の異なる配列同士の演算を行えるようにする仕組みです。ブロードキャスティングとして、以下の関数が使用できます。 代表的な処理を2例示しますが、その他にも様々な処理がありますので、詳細は公式ドキュメントをご参照下さい。 (1)多次元配列Aに対して、サイズ(1行1列)の配列を加算する場合 (2)多次元配列Aに対して、サイズ(1行複数列)の配列を加算する場合解説を見る
broadcast(f, args...)
(下例) broadcast(+, A, C)
配列Aを4行5列の2次元配列とします。これに対して配列C(1行1列の2次元配列)を加算した場合、配列Cは自動的にAと同じサイズに拡張され、演算が行われます。
実行例
このような場合でもブロードキャスティングが可能です。
例えば、サイズが1行3列の配列DをAに加算する際、配列Dと配列Aの列数が等しいので加算することができます。
ブロードキャスティングの条件に以下が挙げられます。
・配列同士の各次元の大きさが同じ
・次元の大きさが異なる場合、片方のサイズが1
実行例
④変換(map)、集約(reduce)、フィルタリング(filter)、その他の演算
配列の各要素に対して、変換や集約やフィルタリングができます。 (1)変換(map) (2)集約(reduce) (3)フィルタリング(filter) 下例では、各要素の値が0.5以上の要素を抽出(フィルタリング)しています。 (4)その他の演算解説を見る
配列の各要素に対して処理を適用します。
適用する処理をfとすると、以下のように使用することができます。
map(f, A)
各要素を集約するような何らかの処理を行います。
適用する処理をfとすると、以下のように使用することができます。
reduce(f, A)
要素に対して条件評価fを追加して抽出します。
filter(f, A)
(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]複素数
Julia早引きノート[04]正規表現
....
もくじを開く
Julia早引きノート[05]if文
Julia早引きノート[06]ループ処理
Julia早引きノート[07]try, catch, finally
Julia早引きノート[08]変数の型(Int, Float, Bool, Char, String)
Julia早引きノート[09]関数 (1)基本編
Julia早引きノート[10]関数 (2)応用編
Julia早引きノート[11]Nothing型
Julia早引きノート[12]複合型(Composite Type)型
Julia早引きノート[13]タプル
Julia早引きノート[14]リスト(Array型一次元配列)
Julia早引きノート[15]辞書(dictionary)
Julia早引きノート[16]集合
Julia早引きノート[17]多次元配列 (1)初期化
Julia早引きノート[18]多次元配列 (2)様々な演算や関数
Julia早引きノート[19]多次元配列 (3)サブ配列
Julia早引きノート[20]ファイル入出力
Julia早引きノート[21]JSON、XMLファイルの入出力
Julia早引きノート[22]Python関数やPythonモジュールの呼び出し
Julia早引きノート[23]JuliaでのMatplotlibによるグラフ描画
Julia早引きノート[24]CSVFiles(DataFrameとの連携)
Julia早引きノート[25]線形代数演算(ベクトル・行列計算)
(※引き続きコンテンツを増やしていきます)
関連情報
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/
ご意見など
ご意見、間違い訂正などございましたらお寄せ下さい。