Python에서 행렬 전치
행렬은 Python에서 다차원 목록을 사용하여 표현할 수 있습니다. 일단 표현되면 행렬 곱셈, 행렬 덧셈, 뺄셈과 같이 수학 이론에서 행렬에 대해 수행할 수 있는 모든 연산을 수행할 수 있습니다.
이 기사에서는 그러한 작업 중 하나에 대해 설명합니다. 몇 가지 관련 예제의 도움으로 Python을 사용하여 행렬을 전치하는 방법을 배웁니다.
Python에서 행렬 전치
Python에서 행렬을 전치하기 위해 간단한 스텁 함수를 작성하고 입력 행렬을 전치하기 위해 for
루프를 사용할 수 있습니다.
def transpose(matrix):
if matrix == None or len(matrix) == 0:
return []
result = [[None for i in range(len(matrix))] for j in range(len(matrix[0]))]
for i in range(len(matrix[0])):
for j in range(len(matrix)):
result[i][j] = matrix[j][i]
return result
def print_matrix(matrix):
for row in matrix:
print(*row)
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
result = transpose(array)
print_matrix(result)
출력:
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
위 방법의 시간 및 공간 복잡도는 O(mn)
이며, 여기서 m
은 입력 행렬의 행 수이고 n
은 입력 행렬의 열 수입니다.
전체 입력 행렬을 반복하기 때문에 시간 복잡도는 O(mn)
입니다. 공간 복잡도는 입력 행렬의 복사본을 만들어 별도의 변수에 저장하기 때문에 O(mn)
입니다.
위의 스텁 함수는 먼저 입력 행렬의 모양이 m x n
인 경우 None
값을 사용하여 n x m
크기의 임시 행렬을 만듭니다. 여기서 m
은 입력 행렬의 행 수이고 n
은 입력 행렬의 열 수입니다.
다음으로 두 개의 중첩 for
루프를 사용하여 입력 행렬을 반복합니다. 두 개의 for
루프 내에서 None
값은 입력 행렬의 실제 값으로 대체됩니다(result[i][j] = matrix[j][i]
). 마지막으로 임시 행렬이 출력으로 반환됩니다.
임시 행렬을 채우기 위해 두 개의 중첩 for
루프를 사용하는 대신 공간을 절약하기 위해 한 줄에 전치 논리를 작성할 수도 있습니다.
def transpose(matrix):
if matrix == None or len(matrix) == 0:
return []
return [[matrix[i][j] for i in range(len(matrix))] for j in range(len(matrix[0]))]
def print_matrix(matrix):
for row in matrix:
print(*row)
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
result = transpose(array)
print_matrix(result)
출력:
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
이 솔루션의 시간 및 공간 복잡도도 이전 솔루션 O(mn)
과 동일합니다.
NumPy
모듈을 사용하여 Python에서 행렬 전치
NumPy
는 대규모 다차원 행렬 및 배열을 가지고 놀고 이에 대해 복잡하고 간단한 수학 연산을 수행하기 위한 유틸리티가 풍부한 Python 패키지입니다. 이러한 유틸리티는 입력에 대해 동적일 뿐만 아니라 고도로 최적화되고 빠릅니다.
Python의 NumPy
모듈을 사용하여 두 가지 방법으로 행렬을 전치할 수 있습니다. 첫 번째는 NumPy
어레이의 T
속성을 사용하는 것이고 두 번째는 NumPy
어레이의 transpose()
메서드를 호출하는 것입니다.
언급된 두 가지 방법을 사용하는 방법을 이해하려면 다음 Python 코드를 참조하십시오.
참고: 이 유틸리티를 사용하려면 먼저 numpy.array()
메서드를 사용하여 NumPy
배열의 입력 행렬을 변환해야 합니다. 이 방법에 대해 자세히 알아보려면 여기를 클릭하세요.
import numpy as np
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
array = np.array(array)
print(array.T) # First Method
print(array.transpose()) # Second Method
출력:
[[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]
[ 5 10 15]]
[[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]
[ 5 10 15]]
transpose()
는 NumPy
배열에 대해 멋진 전치 수정을 수행하는 데 사용할 수 있는 axes
인수를 허용합니다. 이 방법에 대해 자세히 알아보려면 여기를 클릭하세요.