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)

この記事が気に入ったらサポートをしてみませんか?