多次元配列の演算


マトリックスの内積
2 D配列マトリクスの内積を求める方法
(abcd)×(pqrs)=(ap+braq+bscp+drcq+ds)\begin{pmatrix} a & b\\c & d\\\end{pmatrix}\times\begin{pmatrix} p & q\\r & s\\\end{pmatrix} =\begin{pmatrix} ap+br & aq+bs\\cp+dr & cq+ds\\\end{pmatrix}(ac​bd​)×(pr​qs​)=(ap+brcp+dr​aq+bscq+ds​)
マトリックスの内積
  • 左行列の行(横方向)と右行列の列(縦方向)を要素で乗算し、これらの値を加算します.
  • 計算の結果は、新しい多次元配列の要素となる.
  • 行列は通常大文字で表されるのが慣例である.
  • import numpy as np
    
    A = np.array([[1, 2],
    	      [3, 4])
                 
    B = np.array([5, 6],
    	     [7, 8])
    
    print('행렬 A의 shape : {} ' .format(A.shape))
    print('행렬 B의 shape : {} ' .format(B.shape))
    
    ~~>
    행렬 A의 shape : (2, 2)
    행렬 B의 shape : (2, 2)
    行列の内積演算子@またはnpを使用します.dot関数を使用して求めることができます.
    print('A와 B의 내적 : \n{}' .format(np.dot(A, B))
    ~~>
    A와 B의 내적 :
    [[19 22]
     [43 50]]
    
    print('A와 B의 내적 : \n{}' .format(A @ B))
    ~~>
    A와 B의 내적 :
    [[19 22]
     [43 50]]
    整列行列の内積交換法則は成立しない.
    A×B≠B×AA\times B\ne B\times AA×B​=B×A
    print(A @ B)
    ~~>
    [[19 22]
     [43 50]]
    
    print(B @ A)
    ~~>
    [[23 34]
     [31 46]]
    行と列の数が異なるマトリクスの内積
    💡 ルール:1番目のマトリクスの1番目の次元の要素数(列数)が2番目のマトリクスの0番目の次元の要素数(行数)と一致すると、マトリクスの内積を求めることができます.
    A = np.array([[1, 2, 3],
    	      [4, 5, 6]]) # shape : (2, 3)
    B = np.array([[1, 2],
    	      [3, 4],
                  [5, 6]])
    print(A @ B)
    
    ~~>
    [[22 28]
     [49 64]]
     
    print(B @ A)
    
    ~~>
    [[9 12 15]
     [19 26 33]
     [29 40 51]]
    
    C = np.array([[1, 2],
    	      [3, 4]])
    👉 A@C演算はサポートされていません:(2,3)@(2,2)
    👉 C@A演算:(2,2)@(2,2)
    print(C @ A)
    
    ~~>
    [[9 12 15]
     [19 26 33]]
    次元数が異なっていても計算できます
    A = np.array([[1, 2],
    	      [3, 4],
                  [5, 6]])
    
    B = np.array([7, 8]) # 행 벡터의 모형을 하고 있지만 numpy 에서는 열 벡터로 표현이 된다.
    
    A.shape, B.shape
    
    ~~>
    ((3, 2), (2, ))
    
    print(A @ B)
    
    ~~>
    [23 53 83]
    👉 B@A演算はできません.