[Python][프로그래머스 Lv.2] 행렬의 곱셈

1jinju·2023년 11월 13일
0

프로그래머스

목록 보기
13/14

행렬의 곱셈

def solution(arr1, arr2):
    answer = []
    temp = []
    result = 0
    for i in range(len(arr1)):
        for k in range(len(arr2[0])):
            for j in range(len(arr2)):
                result += arr1[i][j] * arr2[j][k]
            temp.append(result)
            result = 0
        answer.append(temp)
        temp = []
    return answer

행렬의 곱셈 어떻게 하는지 잊어버려서 행렬의 곱셈, 행렬의 거듭제곱 글을 참고했다.

3 * 2 행렬과 2 * 2행렬을 곱할 때, 아래의 식으로 각 성분의 값을 구한다.

arr1[i][j] * arr2[j][k]
[[(00 \* 00) + (01 \* 10), (00 \* 01) + (01 * 11)],
[(10 \* 00) + (11 \* 10), (10 \* 01) + (11 \* 11)],
[(20 \* 00) + (21 \* 10), (20 \* 01) + (21 \* 11)]]

j -> k -> i 순으로 값이 변하고 있으므로, for문의 순서를 i -> k -> j로 정하였다.

다른 사람의 풀이

import numpy as np
def productMatrix(A, B):
    return (np.matrix(A)*np.matrix(B)).tolist()

numpy를 사용한 풀이이다.

def productMatrix(A, B):
    return [[sum(a*b for a, b in zip(A_row,B_col)) for B_col in zip(*B)] for A_row in A]

A의 각 행과 B의 각 열에서 원소를 가져와 곱한 후 더하여 푸는 방식이다.
zip(*B)는 B의 각 열을 풀어서 전달하는 역할을 한다.

profile
아자잣

0개의 댓글