keep-loving-pythonのブログ

Pythonを愛し続けたいです(Pythonが流行っている限りですが。。。)

np.dotや行列積や行列とベクトルの積に関する話

np.dotや行列積や行列とベクトルの積に関する話

最初に、行列積(行列の乗法)に関して

どこかの段階で、行列の掛け算の仕方を学ぶと思うが。。。

(↓ 引用。Wikipedia

https://ja.wikipedia.org/wiki/%E8%A1%8C%E5%88%97%E3%81%AE%E4%B9%97%E6%B3%95

上記の乗算の方法が、唯一の方法というわけではなく、
2つ並べた行列のかけ方には、いろいろある。

引用

数学において、行列の対から別の行列を作り出す二項演算としての行列の乗法は、実数や複素数などの数が初等的な四則演算でいうところの乗法を持つことと対照的に、そのような「数の配列」の間の乗法として必ずしも一意的な演算を指しうるものではない。そのような意味では、一般に「行列の乗法」は幾つかの異なる二項演算を総称するものと考えることができる。行列の乗法の持つ重要な特徴には、与えられた行列の行および列の数(行列の型やサイズあるいは次元と呼ばれるもの)が関係して、得られる行列の成分がどのように特定されるかが述べられるということが挙げられる。

行列とベクトルの積

行列とベクトルの積に関しては、上記で示した、一番有名な行列の乗算に完全に従おうとした場合、
縦ベクトルとか横ベクトルとか、
その場合は、数が合わないのでかけられないとか、
乗算の結果が、横ベクトルになるとか、縦ベクトルになるとか、いろいろあるけれど、、
それは、そんな感じとして、最も、使われる感じでかけてみようというのが、 np.dotのノリのような気がする。

import numpy as np

a = np.array([1,2])
b = np.array([[10,20,30],[40,50,60]])
c = np.array([[10,20],[30,40],[50,60]])

p= np.dot(a,b)
print(a.shape,b.shape)
# (2,) (2, 3)
print(p,p.shape)
# [ 90 120 150] (3,)

q = np.dot(c,a)
print(c.shape,a.shape)
# (3, 2) (2,)
print(q,q.shape)
# [ 50 110 170] (3,)

↑ ベクトルは、ベクトルで、縦とか横とか言ってもな。。。というノリか。
2次元配列にすれば、表現はできるが。。。

コメント

コメントなどあれば、是非!!