Python과 NumPy를 사용하여 ND 배열을 1D 배열로 변환하는 방법
이 글에서는 NumPy를 사용하여 ND 배열을 1D 배열로 변환하는 두 가지 일반적인 방법을 살펴보겠습니다.
ravel() 함수 사용
ravel()
함수는 ND 배열을 1D 배열로 평평하게 만듭니다. 기본적으로 배열의 모든 요소를 순서대로 연결하여 새로운 1D 배열을 만듭니다.
import numpy as np
# 2D 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])
# ravel() 함수 사용하여 1D 배열로 변환
arr1d = arr.ravel()
print(arr1d) # 출력: [1 2 3 4 5 6]
ravel()
함수는 복사본을 만들지 않고 원본 배열을 직접 평평하게 만듭니다. 원본 배열을 변경하지 않고 싶은 경우 flatten()
함수를 사용하는 것이 좋습니다.
flatten() 함수 사용
flatten()
함수도 ND 배열을 1D 배열로 변환하지만, ravel()
함수와 달리 복사본을 만들어 반환합니다.
import numpy as np
# 2D 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])
# flatten() 함수 사용하여 1D 배열로 변환 (복사본 생성)
arr1d = arr.flatten()
print(arr1d) # 출력: [1 2 3 4 5 6]
# 원본 배열 확인
print(arr) # 출력: [[1 2 3] [4 5 6]]
추가 참고 사항
reshape()
함수를 사용하여 원하는 형태의 1D 배열을 만들 수도 있습니다. 예를 들어, 2D 배열을 열 우선 1D 배열로 변환하려면 다음과 같이reshape()
함수를 사용할 수 있습니다.
arr1d = arr.reshape(-1, 1) # -1은 배열의 크기를 자동으로 계산하도록 함
np.newaxis
를 사용하여 1D 배열에 새로운 차원을 추가할 수 있습니다.
arr1d = np.array([1, 2, 3])
arr2d = arr1d[:, np.newaxis] # 2D 배열 생성, 열 방향으로 차원 추가
print(arr2d) # 출력: [[1] [2] [3]]
예제 코드: ND 배열을 1D 배열로 변환
ravel() 함수 사용
import numpy as np
# 3D 배열 생성
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
# ravel() 함수 사용하여 1D 배열로 변환
arr1d = arr.ravel()
print(arr1d)
출력:
[ 1 2 3 4 5 6 7 8 9 10 11 12]
flatten() 함수 사용
import numpy as np
# 3D 배열 생성
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
# flatten() 함수 사용하여 1D 배열로 변환 (복사본 생성)
arr1d = arr.flatten()
print(arr1d)
출력:
[ 1 2 3 4 5 6 7 8 9 10 11 12]
reshape() 함수 사용
import numpy as np
# 3D 배열 생성
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
# reshape() 함수 사용하여 1D 배열로 변환 (열 우선)
arr1d = arr.reshape(-1, 1)
print(arr1d)
출력:
[[ 1]
[ 2]
[ 3]
[ 4]
[ 5]
[ 6]
[ 7]
[ 8]
[ 9]
[10]
[11]
[12]]
np.newaxis 사용
import numpy as np
# 2D 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])
# np.newaxis 사용하여 1D 배열에 새로운 차원 추가
arr2d = arr[:, np.newaxis]
print(arr2d)
출력:
[[1]
[2]
[3]
[4]
[5]
[6]]
NumPy로 ND 배열을 1D 배열로 변환하는 대체 방법
for 루프 사용
import numpy as np
# 2D 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])
# for 루프 사용하여 1D 배열로 변환
arr1d = []
for row in arr:
for element in row:
arr1d.append(element)
print(arr1d) # 출력: [1, 2, 3, 4, 5, 6]
리스트 추출 사용
import numpy as np
# 2D 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 리스트 추출 사용하여 1D 배열로 변환
arr1d = list(arr.reshape(-1))
print(arr1d) # 출력: [1, 2, 3, 4, 5, 6]
np.stack() 함수 사용
import numpy as np
# 2D 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])
# np.stack() 함수 사용하여 1D 배열로 변환
arr1d = np.stack(arr)
print(arr1d) # 출력: [[1 2 3]
[4 5 6]]
np.hstack() 또는 np.vstack() 함수 사용
import numpy as np
# 2D 배열 생성
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# np.hstack() 함수 사용하여 1D 배열로 변환 (가로 방향 연결)
arr1d = np.hstack((arr1, arr2))
print(arr1d) # 출력: [1 2 3 4 5 6]
# np.vstack() 함수 사용하여 1D 배열로 변환 (세로 방향 연결)
arr1d = np.vstack((arr1, arr2))
print(arr1d) # 출력: [[1 2 3]
[4 5 6]]
주의:
for
루프와 리스트 추출 방법은 느리고 비효율적일 수 있습니다. 특히 큰 배열을 다룰 때는 더욱 그러합니다.np.stack()
함수는 2D 배열을 1D 배열로 변환하는 데 유용하지만, 3D 이상의 배열에는 적합하지 않습니다.np.hstack()
및np.vstack()
함수는 여러 1D 배열을 하나의 1D 배열로 연결하는 데 사용할 수 있습니다.
python numpy