본문 바로가기
Programming/Python

[ Python ] 파이썬 행렬의 곱셈 코드 | 파이썬 정방행렬 곱셈

by 코뮤(commu) 2021. 1. 7.
728x90
반응형

 

 

이 포스팅은 구름edu 의 파이썬으로 배우는 알고리즘 강의를 기반으로 코드를 작성했음을 밝힙니다.

edu.goorm.io/learn/lecture/22654/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B8%B0%EC%B4%88

 

파이썬으로 배우는 알고리즘 기초 - 구름EDU

실행 가능한 파이썬 소스 코드로 실용적으로 배우는 알고리즘

edu.goorm.io

 

 

 

 

 

문제 : 두 n X n 행렬의 곱을 구하시오. ( 정방행렬 곱셈)

  - A = [[2,3],[4,1]]

  - B = [[5,7],[6,8]]

  - C = AxB

 

출력 사례 : [[28,38],[26,36]]

 

 

 

 

 

-----------------------------------------------------------------------

 

 

 

알고리즘에 대해 생각 하기 전,

 

 

C=[[0]*n for _ in range(n)]

 

 

 

파이썬을 접한지 얼마 되지 않으신 분들은 위의 코드가 해석이 조금 힘들 수도 있다고 생각해,

저 코드부터 설명드리겠습니다.

 

 

만약 n 이 2 라면, 코드의 빨간색 부분이 2번 반복되어 [0,0] 이라는 리스트를 만들 것입니다.

그리고 이것을 for _ in range(n) 이 2번 반복하게 되어 마침내 [[0,0],[0,0]] 이라는 행렬을 만듭니다.

 

 

 

 

행렬의 곱셈 문제를 풀 때는 당연히 행렬의 곱셈이 어떤 식으로 이루어지는지 알아야겠죠?

 

 

 

행렬의 곱은 다음과 같이 이루어집니다.

 

 

 

 

사진 출처 : https://m.blog.naver.com/PostView.nhn?blogId=dhkdwnddml&logNo=220277510428&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 

 

 

 

 

본격적으로 코드를 작성하려면, 아까 제가 위에서 설명한 코드로 C 를 초기화 해주며 시작하면 됩니다.

 

 

 

 

 

def matrixmult(A,B):
    n = len(A)
    C=[[0]*n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            for k in range(n):
                C[i][j]+=A[i][k]*B[k][j]
    return C


A = [[2,3],[4,1]]
B = [[5,7],[6,8]]

print('A = ',A)
print('B = ',B)
C=matrixmult(A,B)
print('C = ',C)
728x90
반응형