240715 TIL #451 CT_행렬의 곱셈 (p / numpy)

김춘복·2024년 7월 14일
0

TIL : Today I Learned

목록 보기
451/571

Today I Learned

오늘도 파이썬 코테 연습.


CT_행렬의 곱셈

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을 곱해 더하면 행렬의 곱셈이 완성된다.


Python 코드

# 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]
profile
Backend Dev / Data Engineer

0개의 댓글