Python/NumPy

NumPy 배열의 형태 변경: reshape, ravel, flatten

임베디드 친구 2025. 10. 3. 19:05
반응형

NumPy 배열의 형태 변경: reshape, ravel, flatten

NumPy는 과학 계산과 데이터 분석에 널리 사용되는 Python 라이브러리로, 다차원 배열 처리가 주된 특징입니다. 이번 포스팅에서는 NumPy 배열의 형태를 변경하는 다양한 방법에 대해 알아보겠습니다. 특히 reshape, ravel, flatten에 대해 자세히 살펴보고, 각 메서드의 사용법과 차이점을 예제와 함께 설명하겠습니다.


1. 배열의 형태 변경이란?

NumPy 배열은 데이터를 다차원 구조로 저장할 수 있습니다. 때로는 데이터를 처리하기 위해 배열의 형태를 변경해야 할 필요가 있습니다. 이를 위해 NumPy는 reshape, ravel, flatten 등 다양한 메서드를 제공합니다.

주요 메서드 소개

  • reshape: 배열의 형태를 새로운 차원으로 변경합니다.
  • ravel: 다차원 배열을 1차원으로 펼칩니다.
  • flatten: 배열을 1차원으로 변환하여 새로운 복사본을 생성합니다.

이제 각 메서드를 구체적으로 살펴보겠습니다.


2. reshape 메서드

reshape 메서드는 배열의 데이터를 유지하면서 배열의 차원을 재구성합니다.

기본 문법

numpy.reshape(a, newshape)
  • a: 원본 배열
  • newshape: 새로운 형태를 정의하는 튜플

사용 예제

import numpy as np

# 원본 배열 생성
arr = np.arange(12)  # 0부터 11까지의 배열 생성
print("원본 배열:")
print(arr)

# reshape 사용
reshaped_arr = np.reshape(arr, (3, 4))  # 3행 4열로 재구성
# reshaped_arr = arr.reshape(3, 4)  # 3행 4열로 재구성
print("재구성된 배열:")
print(reshaped_arr)

출력 결과

원본 배열:
[ 0  1  2  3  4  5  6  7  8  9 10 11]

재구성된 배열:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

주의사항

  1. newshape의 원소 곱은 배열의 총 원소 개수와 같아야 합니다.
    • 예: (3, 4) => 3 * 4 = 12 (총 12개의 원소)
  2. -1을 사용하여 특정 차원을 자동으로 계산할 수 있습니다.
reshaped_arr = arr.reshape(-1, 6)  # 자동으로 첫 번째 차원을 계산
print(reshaped_arr)

3. ravel 메서드

ravel 메서드는 배열을 1차원으로 펼치는 데 사용됩니다. 원본 배열을 참조하기 때문에 성능이 우수합니다.

기본 문법

numpy.ravel(a)
  • a: 배열을 펼칠 대상

사용 예제

# 다차원 배열 생성
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("원본 2D 배열:")
print(arr_2d)

# ravel 사용
raveled_arr = np.ravel(arr_2d)
print("1차원으로 펼쳐진 배열:")
print(raveled_arr)

출력 결과

원본 2D 배열:
[[1 2 3]
 [4 5 6]]

1차원으로 펼쳐진 배열:
[1 2 3 4 5 6]

주의사항

  • ravel은 데이터가 연속적으로 저장되어 있지 않은 경우, 새로운 복사본을 생성할 수 있습니다.

4. flatten 메서드

flatten 메서드는 배열을 1차원으로 변환하지만, 항상 새로운 복사본을 반환합니다.

기본 문법

array.flatten()

사용 예제

# flatten 사용
flattened_arr = arr_2d.flatten()
print("1차원으로 변환된 배열 (복사본):")
print(flattened_arr)

출력 결과

1차원으로 변환된 배열 (복사본):
[1 2 3 4 5 6]

flatten vs ravel

  • ravel: 원본 배열에 의존 (복사본 생성 안 함)
  • flatten: 항상 복사본 생성

5. 메서드 비교 요약

메서드 주요 기능 데이터 복사 여부 사용 목적
reshape 배열 형태 재구성 복사 안 함 (기본) 배열의 형태를 변경
ravel 배열을 1차원으로 펼침 조건에 따라 복사 빠르고 효율적인 변환
flatten 배열을 1차원으로 변환 항상 복사본 생성 안전한 1차원 변환

6. 추가 예제

reshaperavel의 조합

# reshape 후 ravel 사용
reshaped = arr.reshape(2, 6)
raveled = reshaped.ravel()
print("reshape 후 ravel 결과:")
print(raveled)

출력 결과

reshape 후 ravel 결과:
[ 0  1  2  3  4  5  6  7  8  9 10 11]

다양한 차원 변환 예제

# 3D 배열 생성
arr_3d = np.arange(27).reshape(3, 3, 3)
print("3D 배열:")
print(arr_3d)

# 1D로 변환
print("1D로 변환:")
print(arr_3d.flatten())

7. 결론

NumPy의 배열 형태 변경 메서드는 데이터를 효율적으로 처리하고 분석하는 데 매우 유용합니다. 각 메서드의 특징과 사용 목적을 잘 이해하면 데이터 처리 속도를 높이고, 메모리 사용을 최적화할 수 있습니다. 이번 포스팅이 여러분의 NumPy 활용에 도움이 되길 바랍니다!

반응형