ベクトル,行列

演算子

NumPyではベクトル,行列の積の計算に

  • matmul()
  • dot()
  • @

が利用できる. 2次元まではmatmul()dot()は同じ演算を行うが,3次元以上では異なるので注意. @a @ bのように用いる.これはmatmul(a, b)と同じ. @による演算はPython 3.5からサポート.

Import

import numpy as np

ベクトルの内積

a = np.array([0, 1, 2])
b = np.array([3, 4, 5])
np.matmul(a, b)    # 0*3 + 1*4 + 2*5
[出力]
14

ベクトルと行列の積

1次元配列(ベクトル)は縦ベクトル,横ベクトルの区別は無いので,引数の位置によって結果が異なる.

ベクトルを左から行列にかける場合

ベクトルを第1引数にする場合,下記の例では1行2列と解釈される.

$$ \begin{pmatrix} 0 & 1 \\ \end{pmatrix} \begin{pmatrix} 0 & 1 \\ 2 & 3 \\ \end{pmatrix} = \begin{pmatrix} 2 & 3 \\ \end{pmatrix} $$

この計算で得られるのは1次元配列なので行とか列の区別はなくなる.

a = np.array([0, 1])    # ベクトル
bmat = np.array([[0, 1], [2, 3]])    # 行列
np.matmul(a, bmat)
[出力]
array([2, 3])

ベクトルを右から行列にかける場合

ベクトルを第2引数にする場合,下記の例では2行1列と解釈される.

$$ \begin{pmatrix} 0 & 1 \\ 2 & 3 \\ \end{pmatrix} \begin{pmatrix} 0 \\ 1 \\ \end{pmatrix} = \begin{pmatrix} 1 \\ 3 \\ \end{pmatrix} $$

この計算で得られるのは1次元配列なので行とか列の区別はなくなる.

np.matmul(bmat, a)
[出力]
array([1, 3])

行列の積

$$ \begin{pmatrix} 0 & 1 \\ 2 & 3 \\ \end{pmatrix} \begin{pmatrix} 0 & 1 \\ 2 & 3 \\ \end{pmatrix} = \begin{pmatrix} 2 & 3 \\ 6 & 11 \\ \end{pmatrix} $$

amat = np.array([[0, 1],[2, 3]])
bmat = np.array([[0, 1], [2, 3]])
np.matmul(amat, bmat)
[出力]
array([[ 2,  3],
       [ 6, 11]])
前へ
次へ