読者です 読者をやめる 読者になる 読者になる

Python | numpy.array でベクトル、行列の掛け算

>>> import numpy as np


1次元配列 x

>>> x = np.array([1, 2, 3])
>>> x
array([1, 2, 3])

>>> x.T  # 縦ベクトル横ベクトルの区別はない
array([1, 2, 3])


スカラー (a x_i)
ベクトルの和  (x_i + y_i)
各要素にスカラーを加える  (x_i + s)

>>> 2 * x + [10, 20, 30] + 100
array([112, 124, 136])


x.dot(y) →  (\sum_i x_i y_i) x\cdot y ベクトルの内積

>>> x.dot([1, 2, 3])
14


行列 A

>>> A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> A
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])


A + x → (A_{ij} + x_j) 配列の足し算

>>> A + x
array([[ 2,  4,  6],
       [ 5,  7,  9],
       [ 8, 10, 12]])


A * x → (A_{ij} x_j) ただし、j の和は取らない、配列の掛け算
x * A → (x_j A_{ij}) = (A_{ij} x_j) 順番が逆でも同じ結果になる

>>> A * x
array([[ 1,  4,  9],
       [ 4, 10, 18],
       [ 7, 16, 27]])

>>> x * A
array([[ 1,  4,  9],
       [ 4, 10, 18],
       [ 7, 16, 27]])


A.dot(x) → (\sum_{j}A_{ij} x_j)Axx は縦ベクトルとして扱われる

>>> A.dot(x)
array([14, 32, 50])


x.dot(A) → (\sum_{i}x_iA_{ij}) = (\sum_{i}A_{ij}x_i)xAx は横ベクトルとして扱われる

>>> x.dot(A)
array([30, 36, 42])