NUMPY解説(行列計算)
このページは簡単にコピーできるように作っているので、必要に応じて適宜利用してください。
1,NUMPYを導入する。
まず、numpyを読み込まないといけない。
一行目に
import numpy as np
「np」部分は正直何でもいいが、慣習的にnpを使う。
2,一例でコーディングしてみる。
次に、以下の問いを考えてほしい。
Q,行列$${\mathrm{A}=\left(\begin{array}{cccc}1 & 5\\2 & 4 \end{array}\right)}$$と$${\mathrm{B}=\left(\begin{array}{cccc}3 & 1\\2 & 5 \end{array}\right)}$$のとき、
$${\mathrm{2A}}$$、$${\mathrm{A+B}}$$、$${\mathrm{A-B}}$$、$${\mathrm{A \cdot B}}$$、$${\mathrm{AB}}$$、$${\mathrm{A \ast B}}$$、$${\mathrm{A \odot B}}$$、$${\mathrm{A \oslash B}}$$ を求めよ。
※ 備考 ※
「$${\odot}$$」はアダマール積、
「$${\oslash}$$」はアダマール商、
「$${\cdot}$$」は内積(ドット積、スカラー積)、
「$${\times}$$」は外積(クロス積、ベクトル積)の記号。
まず、行列をNUMPYでどのように表すのかが重要!
左辺に行列名、右辺にnp.arrayコマンドを利用して、要素(成分)を羅列していく。
羅列のさせ方は、全体をブランケット( 大かっこ [ ] )でくくり、その中に行でまたブランケットに入れる。
A = np.array([[1, 5], [2, 4]])
B = np.array([[3, 1), [2, 5]])
Point!
カンマの後ろに、半角スペースを入れる。
「array」は、配列という意味。
3,実際に算出させるコードを描く。
NUMPYを使って算出するコードは、
㋑「$${\mathrm{2A}}$$」は数学の計算規則より「$${\ast}$$」記号を省略されるため、補ってコーディングする。
print(2 * A)
㋺「$${\mathrm{A + B}}$$」と「$${\mathrm{A - B}}$$」はそのまま!
print(A + B)
print(A - B)
㋩「$${\mathrm{A \cdot B}}$$」は、内積で数式入力ではなくコマンドを利用する。「np」のコマンドで「dot」という計算を$${\mathrm{A}}$$と$${\mathrm{B}}$$の間で算出してね!って意味。
次元数と行ベクトル or 列ベクトルが一致しているのであれば、コードの1行目は不要。
print(A.shape, B.shape)
print(np.dot(A, B))
㋥「$${\mathrm{AB}}$$」は、2行列の積を求めたいのだけど㋑のようにうまくいかない。順当に「$${\ast}$$」記号を省略されると考え、補ってコーディングをすると㋭と被ってしまう。だからコマンドで解決しよう!
実は、これは3パターンの記述方法がある。
print(A @ B) #パターン1
print(np.matmul(A, B)) #パターン2
print(np.dot(A, B)) #パターン3
㋭「$${\mathrm{A \odot B}}$$」は加減法と同じように、要素同士をかけるアダマール積と呼ばれるものである。(㋥でも示唆してるなぁ~)
print(A * B)
㋬「$${\mathrm{A \oslash B}}$$」も㋭とほぼ同じ!
けど、除法ver.って感じ。
print(A / B)
この記事が気に入ったらサポートをしてみませんか?