Posts 행렬의 곱셈 [Python]
Post
Cancel

행렬의 곱셈 [Python]

URL https://programmers.co.kr/learn/courses/30/lessons/12949

문제 설명

  • 2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

문제 풀이

  • 행렬의 곱셈은

\begin{align} \begin{bmatrix} a11 & a12
a21 & a22
a31 & a32
\end{bmatrix} * \begin{bmatrix} b11 & b12
b21 & b22
\end{bmatrix} = \begin{bmatrix} a11 * b11 + a12 * b21 & a11 * b12 + a12 * b22
a21 * b11 + a21 * b21 & a21 * b12 + a22 * b22
a31 * b11 + a12 * b21 & a31 * b12 + a32 * b22
\end{bmatrix} \end{align}

  • 위의 예제는 3 x 2 * 2 x 2 = 3 x 2의 행렬이 생김
  • arr1의 row가 answer의 row arr2의 col이 answer의 col이 됨
  • 3중 for문으로 원소의 위치를 잡아서 행렬을 곱하고 answer의 해당 위치에 더하게 함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np

def solution(arr1, arr2):
    
    # 곱 매트릭스의 행
    row = len(arr1)
    
    # 곱 매트릭스의 열
    col = len(arr2[0])
    
    # 계산을 위한 
    temp = len(arr2)
    
    # row x col 형태의 매트릭스 생성
    answer = np.zeros((row, col))
    
    for i in range(row):
        for j in range(col):
            for k in range(temp):
                answer[i][j] += arr1[i][k] * arr2[k][j]
    return answer.tolist()
1
2
3
arr1 = [[1, 4], [3, 2], [4, 1]]
arr2 = [[3, 3], [3, 3]]
solution(arr1, arr2)
1
[[15.0, 15.0], [15.0, 15.0], [15.0, 15.0]]
1
2
3
arr1 = [[2, 3, 2], [4, 2, 4], [3, 1, 4]]
arr2 = [[5, 4, 3], [2, 4, 1], [3, 1, 1]]
solution(arr1, arr2)
1
[[22.0, 22.0, 11.0], [36.0, 28.0, 18.0], [29.0, 20.0, 14.0]]
This post is licensed under CC BY 4.0 by the author.