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

파이썬 NumPy reshape() 함수 – 배열 형태 변환 방법과 예제

numpy.reshape() 함수는 배열의 데이터를 변경하지 않고 새로운 형태(shape)를 지정하는 함수입니다. 데이터 전처리나 딥러닝 모델 입력 준비처럼 배열의 차원 구조를 바꿔야 할 때 가장 많이 사용되는 NumPy 함수 중 하나입니다.

numpy.reshape(arr, newshape, order='C')

매개변수

numpy.reshape() 함수는 아래와 같은 매개변수를 받습니다.

  • arr - 형태를 변경할 입력 배열입니다.

  • newshape - 새로 지정할 형태입니다. 정수를 전달하면 해당 길이의 1차원 배열이 되고, 튜플을 전달하면 다차원 배열이 됩니다. 이때 한 개 차원은 -1로 지정할 수 있으며, 나머지 차원 크기와 전체 요소 수를 기준으로 자동 계산됩니다.

  • order - 입력 배열의 요소를 어떤 순서로 읽고 쓸지 결정합니다.

    • 'C' - C 언어 스타일 인덱스 순서입니다. 마지막 축 인덱스가 가장 빠르게 변하고 첫 번째 축 인덱스는 가장 느리게 변합니다. (기본값)

    • 'F' - Fortran 스타일 인덱스 순서입니다. 첫 번째 축 인덱스가 가장 빠르게 변하고 마지막 축 인덱스는 가장 느리게 변합니다.

    • 'A' - 배열이 메모리상에서 Fortran 연속(Fortran-contiguous)이면 'F' 순서로, 그렇지 않으면 'C' 순서로 요소를 읽고 씁니다.

예제 1: 2차원 배열의 형태 변경

다음 예제는 2×3 배열을 3×2 배열로 변형합니다. 두 번째 차원을 -1로 지정해 자동 계산되도록 했습니다.

# numpy 임포트
import numpy as np

# 입력 배열 생성
x = np.array([[3,5,6], [7,8,9]])
print('배열 입력 :\n', x)

# reshape() 함수 적용
y = np.reshape(x, (3, -1))
print('변형된 배열: \n', y)

실행 결과

배열 입력 :
 [[3 5 6]
 [7 8 9]]
변형된 배열:
 [[3 5]
 [6 7]
 [8 9]]

전체 요소는 6개이고 첫 번째 차원을 3으로 지정했으므로, -1로 표시된 두 번째 차원은 자동으로 2로 계산되어 3×2 배열이 생성됩니다.

예제 2: order 옵션으로 1차원 배열 만들기

이번에는 newshape에 정수를 전달하고 order='C' 옵션을 사용해 2차원 배열을 1차원 배열로 펼쳐 보겠습니다.

# numpy 임포트
import numpy as np

# 입력 배열 생성
x = np.array([[1,3,4], [4,6,7]])
print('배열 입력 :\n', x)

# reshape() 함수 적용 (order='C')
y = np.reshape(x, 6, order='C')
print('변형된 배열: \n', y)

실행 결과

배열 입력 :
 [[1 3 4]
 [4 6 7]]
변형된 배열:
 [1 3 4 4 6 7]

order='C'가 기본값이므로 행 우선(row-major) 순서대로 요소가 나열되어 [1 3 4 4 6 7]이 출력됩니다. 만약 order='F'를 사용했다면 열 우선(column-major) 순서로 [1 4 3 6 4 7]이 출력됩니다.

정리

numpy.reshape()는 가능한 한 원본 데이터의 뷰(view)를 반환하므로 메모리를 효율적으로 사용할 수 있습니다. 또한 x.reshape(...)처럼 ndarray 객체의 메서드 형태로도 동일하게 호출할 수 있습니다. 단, 반환되는 배열의 형태만 달라질 뿐 원본 데이터의 값과 순서는 절대 변경되지 않는다는 점을 기억하세요.