2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
arr1 | arr2 | return |
---|---|---|
[[1, 4], [3, 2], [4, 1]] | [[3, 3], [3, 3]] | [[15, 15], [15, 15], [15, 15]] |
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] | [[5, 4, 3], [2, 4, 1], [3, 1, 1]] | [[22, 22, 11], [36, 28, 18], [29, 20, 14]] |
import numpy as np
def solution(arr1, arr2):
result = np.mat(arr1) * np.mat(arr2)
return result.tolist()
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]
zip()은 보통 for문과 함께 같은 길이의 리스트를 순회할 때 많이씁니다. 하지만 여기서는 zip()특성을 활용해 B의 열을 구해낼 수 있습니다.
만약 arr1이 [[1, 4], [3, 2], [4, 1]]
일 때 zip(*arr1)을 쓰면 리스트 세 개의 같은 인덱스에 있는 요소끼리 묶이게 됩니다. 그러므로 [(1,3,4),(4,2,1)]이 됩니다. 이런식으로 zip을 활용해 행렬곱연산을 구현할 수 있습니다. numpy같은 치트키를 쓰지않아도 내장 함수로 1줄코딩을 할 수 있는 멋진 풀이였습니다.