Array の四則演算

Array同士

numpy_l = np.array([1,2,3])
numpy_l2 = np.array([1,1,1])
print(numpy_l - numpy_l2)
[0 1 2]

同じ位置の要素で引き算が行われていることを確認しよう.

numpy_1 = np.array([[1,3],[3,9]])
numpy_2 = np.array([[9,3],[3,1]])
print(numpy_1 * numpy_2)
[[9 9]
[9 9]]

もし、リスト同士で計算しようとすると、リスト1とリスト2が連結されて長くなるので、要素ごとの計算はしてもらえない。

スカラーのブロードキャスト

Arrayはスカラーとも四則演算ができ,このときスカラーは全ての要素に対して計算される.
このように形状を拡張して計算する機能をブロードキャストという.

numpy_l = np.array([1,2,3])
print(numpy_l + 3)
[4 5 6]

Arrayどうしのブロードキャスト

ブロードキャストによって,形状の異なるArrayでも,四則演算ができる場合がある.
計算するには,全ての次元について,

  • 少なくとも片方のArrayの長さが1
  • 2つのArrayの長さが同じ

のうち,どちらかを満たす必要がある.

ブロードキャストできる例

  • 1×2のArrayと3×1のArray(行も列も片方の長さが1)
  • 3×1のArrayと3×4のArray(行が同じ長さ,列は片方の長さが1)
  • 1×2のArrayと3×2のArray(列が同じ長さ,行は片方の長さが1)

ブロードキャストできない例

  • 1×2のArrayと1×4のArray
  • 2×2のArrayと4×4のArray
numpy_l = np.array([[2,2]])
numpy_l2 = np.array([[1,2], [3,4]])
print(numpy_l * numpy_l2)
[[2 4]
 [6 8]]

[[2,2]] (1×2のArray)[[2,2], [2,2]] (2×2のArray)と拡張されて計算されている

numpy_1 = np.array([[1],[2],[3]])
numpy_2 = np.array([[0,1,2],[2,3,4],[4,5,6]])
print(numpy_1 + numpy_2)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

ベクトルの内積

ベクトルの内積を計算するには,numpy.dot()または@(演算子)を使う. ここでは,1次元Arrayをベクトルとして扱う.

0でない2つのベクトル a, bのなす角を θ とする。
このときa⋅b=|a||b|cosθ を aとbの内積とよぶ。

内積とは:内積とは、2 つのベクトル同士の向きをそろえてかけ算したものです。 ベクトルは「大きさ」と「向き」をもつものなので、向きの異なるベクトル同士を純粋にかけ算できません。 そこで、三角比 \cos\theta を用いてベクトルの向きをそろえ、内積として定義したのです。

numpy_l = np.array([1,2,3])
numpy_l2 = np.array([4,5,6])
print(np.dot(numpy_l,numpy_l2))
# または
# numpy_l @ numpy_l2
32

2次元Array(=行列)で同様の計算を処理しようとすると,
「行列の内積」ではなく,「行列の積」が出てくる.

numpy_l = np.array([[1,2], [3,4]])
numpy_l2 = np.array([[1,2], [3,4]])
print(np.dot(numpy_l,numpy_l2))
[[ 7 10]
 [15 22]]

行列の積は要素ごとに,「左の行列の行ベクトル」と「右の行列の列ベクトル」の内積をとっている

2行2列の行列の積は,

コメント

タイトルとURLをコピーしました