Python에서 Numpy를 사용하여 한 줄로 두 행렬의 곱셈

행렬 곱셈은 두 개의 행렬을 입력으로 사용하고 첫 번째 행렬의 행과 두 번째 행렬의 열을 곱하여 단일 행렬을 생성하는 연산입니다. 행렬 곱셈에서 다음을 확인하세요. 첫 번째 행렬의 열 수는 두 번째 행렬의 행 수와 같아야 합니다.

예: 3×3 크기의 두 행렬을 서로 곱합니다.

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]] 

파이썬에서 두 행렬을 곱하는 방법

1. 명시적인 for 루프 사용: 이는 행렬을 곱하는 간단한 기술이지만 더 큰 입력 데이터 세트에 대한 비용이 많이 드는 방법 중 하나입니다. ~을 위한 각 행과 각 열을 반복하는 루프입니다.

행렬1이 nxm 행렬이고 행렬2는 mxl 행렬.

구현:

파이썬3




# 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 패키지의 빌드입니다. 대규모 행렬 작업의 경우 반복적인 방법보다 1000배 빠른 numpy Python 패키지를 사용합니다.
Numpy에 대한 자세한 내용을 보려면 다음을 방문하세요. 링크

구현:

파이썬3




# 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)>

산출:

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

사용 멍청하다

파이썬3




# same result will be obtained when we use @ operator> # as shown below(only in python>3.5)> 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 matrix product of two array> res> => mat1 @ mat2> # print resulted matrix> print> (res)>

산출:

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

위의 예에서 우리는 내적을 사용했으며 수학에서 내적은 동일한 크기의 두 벡터를 가져와 단일 숫자를 반환하는 대수 연산입니다. 결과는 해당 항목을 곱하고 해당 제품을 합산하여 계산됩니다.