numpy——np.array、np.matrix、np.matの区別及び(*)、np.multiply、np.dot乗算の違い


文書ディレクトリ
  • 【1】np.array,np.matrix,np.matの違い
  • (1)np.Arrayと後者の違い
  • (2)np.matとnp.matrixの違い
  • 【3】行列乗算(*)、np.multiply、np.dotの違い
  • (1)乗算された両者がarrayであるとき
  • (2)乗算された両者がmat/matrixである場合
  • (3)まとめ


  • 【1】np.array,np.matrix,np.matの違い
    (1)np.arrayと後者の違い
    データ型が異なるnp.arrayはnumpyを生成する.ndarrayタイプのデータは、マトリクスの意味での乗算はできません.np.matrix,np.matはnumpyを生成する.matrixタイプデータ、マトリクス乗算は次の例を参照
    import numpy as np
    
    
    a = np.mat('1 2 3;3 4 5;1 2 3')
    b = np.mat([[1, 2], [3, 4]])
    print(a)
    print(b)
    '''
           
    [[1 2 3]
     [3 4 5]
     [1 2 3]]
    [[1 2]
     [3 4]]
     '''
    print(type(a))
    print(type(b))
    '''
    <class 'numpy.matrix'>
    <class 'numpy.matrix'>
    '''
    
    c = np.array([[1, 2], [3, 4]])
    print(c)
    '''
    [[1 2]
     [3 4]]
    '''
    print(type(c)) #<class 'numpy.ndarray'>
    

    解釈:arrayは配列を作成し、shapeは(6,)ですが、reshapeを使用すると配列をマトリクスに変換できます.(下例参照)np.arrayとnp.arangeの違い:np.arrayは自分で配列を手動で入力しなければならない.np.aranggeはrangeを直接使用するのと同様に、一連の数字を生成することができます.しかし、両者が生成したのは配列が行列ではない.
    a = np.arange(12).reshape(3,4)
    print(a)
    '''
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
     '''
    b = np.array([1,2,3,4,5,6])
    print(b.shape)    #(6,)
    c = b.reshape(2,3)
    print(c.shape)    #(2, 3)
    

    1次元配列と1次元行列の違い(12,)は配列を表し、1つだけである[].(1,12)は1次元行列で,左右に2つずつ[]があり,matrixは2次元配列を2次元行列に変えることができ,配列を1次元行列に変えることができる.
    a = np.arange(12)
    print(a.shape) #(12,)
    #[ 0  1  2  3  4  5  6  7  8  9 10 11]
    a = np.matrix(a)
    print(a.shape) #(1, 12)
    #[[ 0  1  2  3  4  5  6  7  8  9 10 11]]
    c = np.matrix([[1,2,3,4,5,6],[7,8,9,10,11,12]], dtype=int)
    print(c)
    '''
    [[ 1  2  3  4  5  6]
     [ 7  8  9 10 11 12]]
     '''
    

    (2)np.matとnp.matrixの違い
    配列からマトリクスにnpが変化する.matとnp.matrixの2つの方法.npを使用する.mat後、元の配列を変更すると、次のようにマトリクスも変化します.
    #  ndarray    
    x = np.array([[1, 2], [3, 4]])
    
    #   <class 'numpy.matrix'>   
    m = np.mat(x)
    
    #   m   
    print(m)
    '''
    [[1 2]
     [3 4]]
    '''
    x[0,0] = 0
    print(m)
    '''
    [[0 2]
     [3 4]]
    '''
    
    

    ただしnpを用いる.matrix後、元の配列を変更すると、マトリクスは次のように変化しません.
    #  ndarray    
    x = np.array([[1, 2], [3, 4]])
    
    #   <class 'numpy.matrix'>   
    m = np.matrix(x)
    
    #   m   
    print(m)
    '''
    [[1 2]
     [3 4]]
    '''
    x[0,0] = 0
    print(m)
    '''
    [[1 2]
     [3 4]]
    '''
    

    行列乗算(*)、np.multiply、np.dotの違い
    注意:異なるタイプのデータは、3つのデータを使用する場合に効果が異なります.
    (1)乗算された両者がarrayである場合
    npを使用する.dotはマトリクスの乗算を行うことができる(2×3と3×2=2×2乗算後加算)ですが、積の結果タイプは、真のマトリクス乗算ではないことを示しますが、マトリクス乗算の法則を守ることができます.
    import numpy as np
    a = np.array([[1,2,3],[1,1,1]])
    b = np.array([[1,1],[1,1],[1,1]])
    print(a)
    '''
    [[1 2 3]
     [1 1 1]]
    '''
    print(b)
    '''
    [[1 1]
     [1 1]
     [1 1]]
    '''
    print(np.dot(a,b))
    '''
    [[6 6]
     [3 3]]
    '''
    

    行列乗算規則に合致しない場合は、演算を行うには、2つの数のグループの形式が完全に同じでなければなりません.a*bは対応する要素の積であり、multiplyも対応する要素の積であり、積の結果タイプは
    a = np.array([[1,2,3],[1,1,1]])
    b = np.array([[1,1,1],[1,1,1]])
    print(a)
    '''
    [[1 2 3]
     [1 1 1]]
    '''
    print(b)
    '''
    [[1 1 1]
     [1 1 1]]
    '''
    print(a*b)
    '''
    [[1 2 3]
     [1 1 1]]
    '''
    

    (2)乗算された両者がmat/matrixの場合
    デフォルトのa*bとdot(a,b)は行列の積(3)です.×3と3×1=3×1即ちm×nとn×y=m×y)、結果タイプは
    import numpy as np
    a = np.mat('1 2 3;3 4 5;1 2 3')
    b = np.mat([[1],[1],[1]])
    
    c = np.dot(a,b)
    print(c)
    '''
    [[ 6]
     [12]
     [ 6]]
    '''
    c = a*b
    print(c)
    '''
    [[ 6]
     [12]
     [ 6]]
    '''
    

    Multiplyは対応する要素の積に変換され、乗算条件は2つのマトリクスが完全に同じフォーマットまたは行数が同じで、列数が1(2)である.×3と2×1=3×3即ちm×nとm×1=m×n),対応位置は乗算のみ加算しない
    import numpy as np
    
    a = np.matrix('1 2 3;3 4 5') #    
    b = np.matrix([[1,1,1],[2,2,2]])
    c = np.multiply(a,b)
    print(c)
    '''
    [[ 1  2  3]
     [ 6  8 10]]
    '''
    
    a = np.matrix('1 2 3;3 4 5') #           1
    b = np.matrix([[1],[2]])
    c = np.multiply(a,b)
    print(c)
    '''
    [[ 1  2  3]
     [ 6  8 10]]
    '''
    

    (3)まとめ
    np.dotは、データがarrayであるもmatrixであるもマトリクス乗算npを表す.Multiplyは、arrayまたはmatrixにかかわらず、対応する位置乗算を表す
    データ型がarray、(*)およびnpの場合.Multiplyは対応する位置に乗算、npを表す.dotはマトリクス形式の乗算を表す
    データ型がmatrixの場合、np.Multiplyは、対応する位置位置に乗算、(*)とnpを表す.dotはマトリクス形式の乗算を表す