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의 각 열을 풀어서 전달하는 역할을 한다.