Python/NumPy

NumPy 배열의 반복 및 타일링 (tile, repeat)

임베디드 친구 2025. 10. 5. 21:04
반응형

NumPy 배열의 반복 및 타일링 (tile, repeat)

NumPy는 파이썬에서 과학 계산을 위해 널리 사용되는 라이브러리로, 고성능 다차원 배열 객체를 제공합니다. 오늘은 NumPy에서 배열을 반복하거나 타일링하여 데이터를 확장하는 데 사용되는 tilerepeat 함수에 대해 알아보겠습니다.


1. tile 함수란?

tile 함수는 배열을 지정된 패턴으로 반복하여 새로운 배열을 생성합니다. 타일링은 원래 배열을 마치 타일처럼 여러 번 복사하여 배치하는 방식입니다.

문법

numpy.tile(A, reps)
  • A: 입력 배열
  • reps: 각 축(axis)별로 반복할 횟수를 지정한 정수 또는 정수의 튜플

예제 1: 1차원 배열 타일링

import numpy as np

arr = np.array([1, 2, 3])
result = np.tile(arr, 3)
print(result)

출력:

[1 2 3 1 2 3 1 2 3]

예제 2: 2차원 배열 타일링

arr_2d = np.array([[1, 2], [3, 4]])
result_2d = np.tile(arr_2d, (2, 3))
print(result_2d)

출력:

[[1 2 1 2 1 2]
 [3 4 3 4 3 4]
 [1 2 1 2 1 2]
 [3 4 3 4 3 4]]
  • (2, 3)은 배열을 세로로 2번, 가로로 3번 반복하도록 지정합니다.

2. repeat 함수란?

repeat 함수는 배열의 각 요소를 지정된 횟수만큼 반복하여 새로운 배열을 생성합니다. tile과 달리 요소 단위의 반복에 초점이 맞춰져 있습니다.

문법

numpy.repeat(A, repeats, axis=None)
  • A: 입력 배열
  • repeats: 각 요소를 반복할 횟수 (정수 또는 정수의 배열)
  • axis: 반복할 축 (기본값은 None으로, 플래튼(flatten)한 배열에서 반복)

예제 3: 1차원 배열 요소 반복

arr = np.array([1, 2, 3])
result = np.repeat(arr, 2)
print(result)

출력:

[1 1 2 2 3 3]

예제 4: 2차원 배열 요소 반복 (축 지정)

arr_2d = np.array([[1, 2], [3, 4]])
result_axis0 = np.repeat(arr_2d, 2, axis=0)  # 행(axis=0) 반복
result_axis1 = np.repeat(arr_2d, 2, axis=1)  # 열(axis=1) 반복

print("행 반복:")
print(result_axis0)
print("열 반복:")
print(result_axis1)

출력:

행 반복:
[[1 2]
 [1 2]
 [3 4]
 [3 4]]

열 반복:
[[1 1 2 2]
 [3 3 4 4]]

3. tilerepeat의 차이점

  • 기능적인 차이: tile은 전체 배열을 복사하여 배치하는 데 사용되고, repeat는 개별 요소를 반복하는 데 사용됩니다.
  • 적용 범위: tile은 배열 구조를 유지하며 반복하지만, repeat는 요소 단위로 반복하여 배열 구조를 변경할 수 있습니다.

비교 예제

arr = np.array([1, 2, 3])

tiled = np.tile(arr, 2)
repeated = np.repeat(arr, 2)

print("tile 결과:", tiled)
print("repeat 결과:", repeated)

출력:

tile 결과: [1 2 3 1 2 3]
repeat 결과: [1 1 2 2 3 3]

4. 응용 예제

예제 5: 데이터 확장에 활용

tilerepeat은 데이터 전처리 시, 배열 크기를 늘리거나 데이터를 복제하는 데 유용합니다.

(1) 타일링으로 패턴 생성

pattern = np.array([0, 1])
tiled_pattern = np.tile(pattern, 5)
print(tiled_pattern)

출력:

[0 1 0 1 0 1 0 1 0 1]

(2) 반복으로 데이터 증폭

labels = np.array([1, 2, 3])
repeated_labels = np.repeat(labels, 3)
print(repeated_labels)

출력:

[1 1 1 2 2 2 3 3 3]

5. 주의할 점

  1. 메모리 사용:

    • tilerepeat은 입력 배열을 복사하여 새로운 배열을 생성하므로 메모리 사용량이 증가할 수 있습니다.
    • 큰 배열에 대해 높은 반복 횟수를 지정할 경우, 메모리 부족 문제가 발생할 수 있습니다.
  2. 반복 횟수의 유연성:

    • repeat은 요소마다 다른 반복 횟수를 지정할 수 있습니다.
    • 예:
      arr = np.array([1, 2, 3])
      result = np.repeat(arr, [1, 2, 3])
      print(result)
      출력:
      [1 2 2 3 3 3]

6. 결론

NumPy의 tilerepeat 함수는 배열 데이터를 확장하거나 복제하는 데 매우 유용한 도구입니다. 두 함수는 비슷해 보이지만, 배열의 전체 복사와 요소 단위 복사라는 차이점을 이해하면 보다 효율적으로 사용할 수 있습니다. 데이터 전처리, 머신러닝 및 기타 배열 조작 작업에서 이 두 함수를 적절히 활용해 보세요!

반응형