logo

Python で Numpy を使用して 1 行で 2 つの行列を乗算する

行列乗算は、2 つの行列を入力として受け取り、最初の行列の行を 2 番目の行列の列に乗算して 1 つの行列を生成する演算です。行列の乗算では、次のことを確認してください。 最初の行列の列数は、2 番目の行列の行数と等しくなければなりません。

例: サイズ 3×3 の 2 つの行列の相互乗算。



Input:matrix1 = ([1, 2, 3], [3, 4, 5], [7, 6, 4]) matrix2 = ([5, 2, 6], [5, 6, 7], [7, 6, 4]) Output : [[36 32 32] [70 60 66] [93 74 100]]>

Pythonで2つの行列を乗算する方法

1. 明示的な for ループを使用する: これは行列を乗算する単純な手法ですが、大規模な入力データ セットに対しては高価な手法の 1 つです。ここでは、ネストされたメソッドを使用します。 のために ループを使用して各行と各列を繰り返します。

行列 1 が n×m 行列と行列 2 は メートル×リットル マトリックス。



実装:

Python3




Javaの列挙型の値



# input two matrices of size n x m> matrix1>=> [[>12>,>7>,>3>],> >[>4> ,>5>,>6>],> >[>7> ,>8>,>9>]]> matrix2>=> [[>5>,>8>,>1>],> >[>6>,>7>,>3>],> >[>4>,>5>,>9>]]> res>=> [[>0> for> x>in> range>(>3>)]>for> y>in> range>(>3>)]> # explicit for loops> for> i>in> range>(>len>(matrix1)):> >for> j>in> range>(>len>(matrix2[>0>])):> >for> k>in> range>(>len>(matrix2)):> ># resulted matrix> >res[i][j]>+>=> matrix1[i][k]>*> matrix2[k][j]> print> (res)>

>

>

出力

[[114, 160, 60], [74, 97, 73], [119, 157, 112]]>

このプログラムでは、行列の各行と列を反復処理する結果の計算にネストされた for ループを使用し、最後に結果の積の合計を累積します。

2. Numpy の使用: Numpy を使用した乗算はベクトル化としても知られており、プログラム内での for ループの明示的な使用を削減または削除して計算を高速化することを主な目的としています。
Numpy は、配列の処理と操作を行うための Python パッケージのビルドです。大規模な行列演算には、反復的な 1 つの方法よりも 1000 倍高速な numpy Python パッケージを使用します。
Numpy の詳細については、こちらをご覧ください。 リンク

実装:

Python3




# We need install numpy in order to import it> import> numpy as np> # input two matrices> mat1>=> ([>1>,>6>,>5>],[>3> ,>4>,>8>],[>2>,>12>,>3>])> mat2>=> ([>3>,>4>,>6>],[>5>,>6>,>7>],[>6>,>56>,>7>])> # This will return dot product> res>=> np.dot(mat1,mat2)> # print resulted matrix> print>(res)>

>

Javaのサンプルコード

>

出力:

[[ 63 320 83] [ 77 484 102] [ 84 248 117]]>

使用する しこり

Python3




# same result will be obtained when we use @ operator> # as shown below(only in python>3.5)>> numpy as np> # input two matrices> mat1>=> ([>1>,>6>,>5>],[>3> ,>4>,>8>],[>2>,>12>,>3>])> mat2>=> ([>3>,>4>,>6>],[>5>,>6>,>7>],[>6>,>56>,>7>])> # This will return matrix product of two array> res>=> mat1 @ mat2> # print resulted matrix> print>(res)>

>

優先キュー

>

出力:

[[ 63 320 83] [ 77 484 102] [ 84 248 117]]>

上の例ではドット積を使用しましたが、数学ではドット積は同じサイズの 2 つのベクトルを受け取り、単一の数値を返す代数演算です。結果は、対応するエントリを乗算し、それらの積を合計することによって計算されます。