行列の乗算は、2 つの行列を入力として受け取り、最初の行列の行を 2 番目の行列の列に乗算することによって 1 つの行列を生成する演算です。最初の行列の行数が 2 番目の行列の列数と等しいことを確認する必要があることに注意してください。
Python では、NumPy を使用した行列乗算のプロセスは次のように知られています。 ベクトル化 。ベクトル化の主な目的は、 for ループ これを明示的に使用していました。プログラムの「for」ループを減らすことで、計算が高速化されます。ビルドイン パッケージ NumPy は、操作と配列処理に使用されます。
これらは、numpy 行列の乗算を実行できる 3 つの方法です。
- 1 つ目は、行列の要素ごとの乗算を実行する multiply() 関数の使用です。
- 2 番目は、2 つの配列の行列積を実行する matmul() 関数の使用です。
- 最後は、2 つの配列の内積を実行する dot() 関数の使用です。
例 1: 要素ごとの行列の乗算
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.multiply(array1,array2) result
上記のコードでは
- numpy をエイリアス名 np でインポートしました。
- numpy.array() 関数を使用して次元 3 の array1 と array2 を作成しました。
- 変数結果を作成し、np.multiply() 関数の戻り値を割り当てました。
- np.multiply() で配列 array1 と array2 の両方を渡しました。
- 最後に、結果の値を出力してみました。
出力では、要素が array1 要素と array2 要素の両方を要素ごとに乗算した結果である 3 次元行列が示されています。
出力:
array([[[ 9, 16, 21], [24, 25, 24], [21, 16, 9]]])
例 2: 行列積
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.matmul(array1,array2) result
出力:
array([[[ 30, 24, 18], [ 84, 69, 54], [138, 114, 90]]])
上記のコードでは
- numpy をエイリアス名 np でインポートしました。
- numpy.array() 関数を使用して次元 3 の array1 と array2 を作成しました。
- 変数結果を作成し、np.matmul() 関数の戻り値を割り当てました。
- np.matmul() で配列 array1 と array2 の両方を渡しました。
- 最後に、結果の値を出力してみました。
出力には、要素が array1 要素と array2 要素の両方の積である 3 次元行列が示されています。
例 3: 内積
numpy.dot の仕様は次のとおりです。
- a と b が両方とも 1 次元(一次元)配列の場合 -> 2 つのベクトルの内積(複素共役なし)
- a と b が両方とも 2 次元 (2 次元) 配列の場合 -> 行列の乗算
- a または b のいずれかが 0-D (スカラーとも呼ばれます) の場合 -> numpy.multiply(a, b) または a * b を使用して乗算します。
- a が N 次元配列で、b が 1 次元配列の場合 -> a と b の最後の軸の積を合計します。
- a が N-D 配列で、b が M-D 配列の場合、M>=2 の場合 -> a の最後の軸と b の最後から 2 番目の軸の積の合計:
また、dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.dot(array1,array2) result
上記のコードでは
- numpy をエイリアス名 np でインポートしました。
- numpy.array() 関数を使用して次元 3 の array1 と array2 を作成しました。
- 変数結果を作成し、np.dot() 関数の戻り値を割り当てました。
- np.dot() で配列 array1 と array2 の両方を渡しました。
- 最後に、結果の値を出力してみました。
出力には、要素が array1 要素と array2 要素の両方の内積である 3 次元行列が示されています。
出力:
array([[[[ 30, 24, 18]], [[ 84, 69, 54]], [[138, 114, 90]]]])