오늘도 파이썬 코테 연습.
https://school.programmers.co.kr/learn/courses/30/lessons/12949
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수를 만들어라.
원래 행렬 곱셈을 파이썬으로 계산할 땐 numpy를 일반적으로 사용한다.
arr1과 arr2를 np.array로 변환시켜준 후 dot()으로 곱하면 결과가 np.array로 출력된다.
이를 tolist() 함수로 다시 파이썬 리스트로 변환한 후 반환하면 완료된다.
하지만 코테에서 원하는 것은 numpy 라이브러리를 사용하는 것이 아니므로 다시 풀어봤다.
리스트 컴프리헨션을 이용해 한줄로 완성했다.
행렬의 곱셈은 앞쪽 행렬의 행(A_row)과 뒤쪽 행렬의 열(B_col)을 곱해서 더해야하는 구조다.
따라서 zip(*B)로 행렬 B를 전치시켜 열을 행으로 변환해서 B_col을 만든다.
그 뒤 sum(a*b for a, b in zip(A_row, B_col))의 구조로 A_row와 B_col을 곱해 더하면 행렬의 곱셈이 완성된다.
# numpy 사용
import numpy as np
def solution(arr1, arr2):
a = np.array(arr1, int)
b = np.array(arr2, int)
answer = a.dot(b).tolist()
return answer
# 미사용
def solution_2(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]