LoginSignup
7
1

More than 5 years have passed since last update.

1d arrayと2d arrayを渡したときのnumpy.dotの挙動

Posted at

疑問

>>> a = np.array([1,2,3])
>>> b = np.array([2,3,4])
>>> np.dot(a, b)
20
>>> A = np.array([[1,2],[2,3],[3,4]]) # 3x2
>>> B = np.array([[1,2,3],[2,3,4]]) # 2x3
>>> np.dot(A, B)
array([[ 5,  8, 11],
       [ 8, 13, 18],
       [11, 18, 25]])

上に示したように、2つの1d arrayでnumpy.dotすると内積に、2つの2d arrayだと行列積になるが、
1d arrayと2d arrayを1つずつ渡すとどうなるか?

検証

第一引数に1d arrayを渡す

>>> A = np.array([[1,2],[2,3],[3,4]]) # 3x2
>>> b = np.array([1,2,3])
>>> np.dot(b, A)
array([14, 20])

第一引数に渡された3次元の1d arrayであるbは1x3の2d arrayのような扱いになり、
行列積が1d arrayに変換されて返ってくる。

>>> A = np.array([[1,2],[2,3],[3,4]]) # 3x2
>>> B = np.array([[1,2,3]]) #1x3
>>> np.dot(B, A)
array([[14, 20]])

第二引数に1d arrayを渡す

>>> A = np.array([[1,2],[2,3],[3,4]]) # 3x2
>>> b = np.array([1,2])
>>> np.dot(A, b)
array([ 5,  8, 11])

第二引数に渡されたときは2x1の2d arrayのような扱いになる。

>>> A = np.array([[1,2],[2,3],[3,4]]) # 3x2
>>> B = np.array([[1],[2]]) # 2x1
>>> np.dot(A, B)
array([[ 5],
       [ 8],
       [11]])

結論

N次元の1d arrayは、
* numpy.dotの第一引数に渡されたときは1xNの2d arrayのような扱いに
* numpy.dotの第二引数に渡されたときはNx1の2d arrayのような扱いに
なり、行列積が1d arrayに変換されて返ってくる。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1