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列の行列の積は,
コメント