HOWTO · NumPy

NumPy 배열을 튜플로 변환

Python에서 NumPy 배열을 튜플로 변환하는 데 사용할 수있는 두 가지 주요 메서드, tuple() 함수 및 map() 함수가 있습니다.

이 페이지의 내용

Python의 내장 tuple() 함수로 NumPy 배열을 변환할 수 있습니다. 1차원 배열에서는 tuple(array)가 각 요소를 담은 튜플을 만듭니다. 2차원 배열에서 중첩 튜플이 필요하다면 각 행도 변환하세요. 아래 예제에서는 두 구조와 map()를 사용하는 대안을 보여 줍니다.

1차원 NumPy 배열을 튜플로 변환

tuple()은 이터러블을 소비해 반복 중에 반환되는 항목을 튜플에 담습니다. 1차원 NumPy 배열은 반복할 때 값들을 반환하므로, 이를 바로 tuple()에 전달하면 평탄한 튜플이 만들어집니다. 다음 예제는 NumPy 정수를 사용합니다. 표시되는 표현은 NumPy 버전에 따라 달라질 수 있습니다.

다음 예제를 실행하세요:

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

array = np.array([10, 20, 30])
result = tuple(array)
print(result)
(np.int64(10), np.int64(20), np.int64(30))

2차원 NumPy 배열을 중첩 튜플로 변환

2차원 배열을 반복하면 행이 반환됩니다. 따라서 tuple(matrix)를 실행하면 바깥쪽 튜플의 각 항목은 여전히 NumPy 행 배열입니다. 행까지 튜플로 변환하려면 각 행을 tuple()에 전달하세요. 이렇게 하면 결과에서도 원래의 행과 열 구성이 유지됩니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

matrix = np.array([[1, 2], [3, 4]])
result = tuple(tuple(row) for row in matrix)
print(result)
((np.int64(1), np.int64(2)), (np.int64(3), np.int64(4)))

컴프리헨션은 각 행에 대해 안쪽 변환을 한 번씩 수행하고, 바깥쪽 tuple()가 변환된 행 튜플을 모읍니다. NumPy 스칼라의 표시는 버전에 따라 달라질 수 있습니다.

map()로 각 행 변환

행마다 같은 작업을 map(tuple, matrix)로 표현할 수도 있습니다. Python에서 map()는 이터레이터를 반환하므로, 변환된 모든 행을 실제 튜플로 만들려면 이를 tuple()로 감싸세요. 각 행에 tuple()을 적용하는 것이 전부일 때 간결하게 쓸 수 있는 방법입니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

matrix = np.array([[1, 2], [3, 4]])
result = tuple(map(tuple, matrix))
print(result)
((np.int64(1), np.int64(2)), (np.int64(3), np.int64(4)))

여기서 map()는 각 스칼라 값이 아니라 행을 변환합니다. 각 요소의 값을 변환하려면 1차원 배열의 값을 Python 정수로 바꿀 때 tuple(int(value) for value in array)처럼 다른 식을 사용하세요. 행을 변환할지 값을 변환할지에 따라 적절한 방법이 달라집니다.

필요한 결과에 맞는 변환 방법 선택

1차원 시퀀스를 평탄하게 만들려면 tuple(array)를 사용하세요. 2차원 배열에서 각 행을 별도의 튜플로 유지하려면 tuple(tuple(row) for row in matrix) 또는 이에 해당하는 map() 변환을 사용하세요. 두 방법 모두 행 사이의 값 그룹을 유지합니다.

튜플에는 shape 속성이나 배열 연산 같은 NumPy 배열의 속성이 보존되지 않습니다. 중첩 구조는 변환된 행을 반영하지만 NumPy의 shape 메타데이터는 아닙니다. 모든 값을 하나의 시퀀스로 모아야 한다면 배열 메서드로 평탄화할 수 있습니다. 평탄화하면 행 구분이 사라지며, 중첩 튜플을 만드는 데 필요한 단계는 아닙니다.

또한 배열을 튜플로 변환해도 모든 항목이 기본 Python 스칼라가 되는 것은 아닙니다. NumPy 값은 NumPy 스칼라 객체로 남을 수 있습니다. 이후 코드에서 해당 타입이 필요할 때만 int() 같은 명시적 변환을 적용하고, 실제 값에 맞는 변환을 선택하세요. 표시되는 NumPy 스칼라 표현은 버전에 따라 달라질 수 있습니다.