Numpyで行列を作る場合、下記の3種類の方法がある。
①numpy.array([1, 2], [3, 4])
②numpy.matrix(numpy.array([1, 2], [3, 4]))
③numpy.mat(numpy.array([1, 2], [3, 4]))
上記の挙動について調べたことを下記に示す。
足し算・引き算
import numpy as np
a = np.array([2, 2])
a.shape -> (2, )
b = np.array([[1, 2], [3, 4]])
b.shape -> (2, 2)
a - b -> array([[1 , 0],
[-1, -2]])
c = np.matrix([[1, 2, 3], [4, 5, 6]])
c.shape -> (2, 3)
a - c -> error!
掛け算
①の方法を採用する時、行列aとbの掛け算はnumpy.dot(a, b)とする必要がある。もしもa * bとすると、それは各要素毎に掛け算を行うことを意味する。②、③の時は、a * bでもnumpy.dot(a, b)のどちらでもよい。以上をコードで表すと下記の様になる。
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[4, 3], [2, 1]])
a * b -> array([[4 , 6]
[6 , 4]])
np.dot(a, b) -> array([[8 , 5],
[20, 13]])
c = np.matrix(np.array([[1, 2], [3, 4]]))
d = np.matrix(np.array([[4, 3], [2, 1]]))
c * d -> matrix([[8 , 5],
[20, 13]])
np.dot(c * d)-> matrix([[8 , 5],
[20, 13]])
e = np.mat(np.array([[1, 2], [3, 4]]))
f = np.mat(np.array([[4, 3], [2, 1]]))
e * f -> matrix([[8 , 5],
[20, 13]])
np.dot(e * f)-> matrix([[8 , 5],
[20, 13]])
g = np.array([1, 2])
g * a -> error!
np.dot(a, a) -> error!