Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 행렬의 전치행렬(Transpose) 구하기: 단계별 가이드

전치행렬(Transpose)이란?

n×n 크기의 행렬 M이 주어졌을 때, 해당 행렬의 전치행렬(transpose)을 구해야 합니다. 전치행렬은 원래 행렬의 행과 열의 위치를 서로 맞바꾼 행렬로, 모든 r과 c에 대해 matrix[r][c] = matrix[c][r]라는 관계가 성립합니다.

입력 예시

726
372
537

출력 결과

735
273
627

위 예시에서 확인할 수 있듯이, 입력 행렬의 각 열이 출력 행렬의 행으로 그대로 변환됩니다.

해결 절차

다음 단계를 따르면 문제를 쉽게 해결할 수 있습니다.

  • 빈 리스트 M을 생성합니다.
  • 변수 tracker를 0으로 초기화합니다.
  • tracker가 행렬의 행 개수보다 작은 동안 아래 과정을 반복합니다.
    • 임시 리스트 temp를 생성합니다.
    • 행렬의 각 행(row)에 대해 row[tracker] 요소를 temp에 추가합니다.
    • 완성된 temp를 M의 한 행으로 추가합니다.
    • tracker 값을 1 증가시킵니다.
  • 모든 반복이 끝나면 M을 반환합니다.

파이썬 구현 예제

class Solution:
    def solve(self, matrix):
        M = []
        tracker = 0
        while tracker < len(matrix):
            temp = []
            for row in matrix:
                temp += [row[tracker]]
            M += [temp]
            tracker += 1
    return M

ob = Solution()
matrix = [[7, 2, 6], [3, 7, 2], [5, 3, 7]]
print(ob.solve(matrix))

입력

[[7, 2, 6],
[3, 7, 2],
[5, 3, 7]]

출력

[[7, 3, 5], [2, 7, 3], [6, 2, 7]]

더 간결한 방법: zip() 함수 활용하기

파이썬에서는 내장 함수 zip()을 사용하면 위 로직을 단 한 줄로 표현할 수 있습니다. zip(*matrix)는 언패킹 연산자를 활용해 행렬의 각 열을 묶어주므로, 전치행렬을 구하는 가장 파이써닉(Pythonic)한 방법으로 꼽힙니다.

def transpose(matrix):
    return [list(row) for row in zip(*matrix)]

matrix = [[7, 2, 6], [3, 7, 2], [5, 3, 7]]
print(transpose(matrix))
# 출력: [[7, 3, 5], [2, 7, 3], [6, 2, 7]]

정리

전치행렬은 행과 열을 맞바꾸는 간단한 연산이지만, 선형 대수 계산이나 이미지 처리 등 다양한 분야에서 널리 활용됩니다. 반복문으로 직접 구현하면 알고리즘의 동작 원리를 깊이 이해할 수 있으며, 실무에서는 zip(*matrix)처럼 간결하고 효율적인 방식을 사용하는 것이 좋습니다.