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

파이썬(Python)으로 행렬 전치하기: 중첩 반복문부터 zip() 함수까지

행렬의 전치(Transpose)란 무엇인가?

행렬의 행(row)열(column)을 서로 맞바꾸는 연산을 '전치(transpose)'라고 합니다. 즉, 원래 행렬의 첫 번째 행이 전치된 행렬의 첫 번째 열이 되고, 두 번째 행은 두 번째 열이 되는 식입니다.

파이썬에서 행렬은 별도의 특수 자료형 없이, 동일한 개수의 요소를 가진 리스트의 리스트(list of lists)로 표현합니다. 예를 들어 3행 2열짜리 행렬은 다음과 같은 리스트 객체로 나타낼 수 있습니다.

X = [[12,7],
    [4 ,5],
    [3 ,8]]

중첩 반복문을 이용한 행렬 전치

위 행렬을 전치하면 2행 3열의 새로운 행렬이 만들어집니다. 가장 기본적인 방법은 중첩 for 루프(nested loops)를 사용하는 것입니다. 바깥쪽 루프는 행을 순회하고, 안쪽 루프는 열을 순회하면서 요소의 위치를 서로 교환합니다.

X = [[12,7],
    [4 ,5],
    [3 ,8]]

result = [[0,0,0],
          [0,0,0]]

# 행(row)을 순회
for i in range(len(X)):
    # 열(column)을 순회
    for j in range(len(X[0])):
        result[j][i] = X[i][j]

for r in result:
    print(r)

이 코드를 실행하면 다음과 같이 전치된 행렬이 출력됩니다.

[12, 4, 3]
[7, 5, 8]

zip() 함수로 더 간결하게 전치하기

중첩 반복문 대신 파이썬 내장 함수인 zip()을 활용하면 한 줄로 행렬을 전치할 수 있습니다. *X로 각 행을 언패킹(unpacking)한 뒤 zip으로 묶으면, 행과 열이 자동으로 뒤바뀝니다.

X = [[12,7],
    [4 ,5],
    [3 ,8]]

result = [list(row) for row in zip(*X)]

for r in result:
    print(r)

출력 결과는 중첩 반복문 방식과 동일합니다.

[12, 4, 3]
[7, 5, 8]

마무리

파이썬에서 행렬을 전치하는 방법은 크게 두 가지입니다. 원리를 이해하기 좋은 중첩 반복문 방식과, 실무에서 간결하게 활용할 수 있는 zip() 함수 방식입니다. 데이터 분석이나 수치 계산에서는 NumPy의 .T 속성을 사용하는 것도 좋은 선택이니, 상황에 맞는 방법을 골라 활용해 보시기 바랍니다.