넘파이 resize() 함수
넘파이(NumPy)의 resize() 함수는 배열의 크기를 변경하는 함수이다. 이 함수를 사용하여 배열의 모양(shape)을 조정하거나 크기를 늘리거나 줄일 수 있다. 다만, 크기를 변경하면서 데이터를 재배열하거나 채워 넣지는 않는다.
resize() 함수의 기본 구조는 아래와 같다.
import numpy as np
np.resize(a, new_shape)
- a - 크기를 변경하려는 배열
- new_shape - 변경하려는 새로운 모양(크기)을 나타내는 튜플이나 정수
resize() 함수는 원본 배열 a를 변경하지 않고 주어진 new_shape에 따라 크기를 조정한 새로운 배열을 반환한다. 예를 들어, 1차원 배열을 2x3 형태의 2차원 배열로 변경하려면 아래와 같이 사용할 수 있다.
import numpy as np
arr1d = np.array([1, 2, 3, 4, 5, 6])
resized_arr = np.resize(arr1d, (2, 3))
print("Original Array")
print(arr1d)
print("Resized Array")
print(resized_arr)
1차원 배열 arr1d를 크기가 (2,3)인 2차원 배열로 조정하고 결과를 출력한다.
Original Array
[1 2 3 4 5 6]
Resized Array
[[1 2 3]
[4 5 6]]
실행 결과
그럼 resize()와 reshape()의 차이는 무엇인가?
resize()와 reshape()는 모두 넘파이(NumPy)에서 배열의 크기를 변경하는 함수들이지만, 몇 가지 중요한 차이점이 있다.
- 데이터의 처리 방식
- resize() - 크기를 조정할 때, 데이터를 반복하여 채워 넣거나 잘라내어 크기를 조절한다. 크기가 증가하면 데이터를 반복해서 채우고, 감소하면 데이터를 잘라낸다.
- reshape() - 크기를 조정할 때, 데이터의 순서를 바꾸지 않고 새로운 모양으로 배열을 만든다. 만약 크기가 원본 배열과 호환되지 않는다면 에러가 발생한다.
- 원본 배열 변경 여부
- resize() - 원본 배열을 변경하지 않고 새로운 배열을 반환한다.
- reshape() - 원본 배열을 변경하지 않고 새로운 배열을 반환한다. 다만, 크기가 호환되지 않으면 새로운 배열을 생성하지 못하고 에러가 발생한다.
이번에는 resize() 함수를 사용하여 크기를 조절하는 예제를 살펴보자.
import numpy as np
# 1차원 배열 생성
arr1d = np.array([1, 2, 3, 4, 5, 6])
# resize 함수를 사용하여 크기를 조절
resized_arr = np.resize(arr1d, (2, 4))
print("Original Array")
print(arr1d)
print("Resized Array")
print(resized_arr)
arr1d는 총 6개의 원소를 가진 1차원 배열이다, 그리고 resize() 함수를 통해 2x4(총 8개의 원소)의 2차원 배열로 크기를 변경하는 예제이다. 해당 코드를 실행할 경우 어떻게 출력이 나오는지 살펴보자.
Original Array:
[1 2 3 4 5 6]
Resized Array:
[[1 2 3 4]
[5 6 1 2]]
실행 결과
실행 결과에서 볼 수 있듯이 resize() 함수를 사용하면 지정한 크기로 배열을 조절한다, 이때 주의할 점은 크기가 증가하면 데이터를 반복하여 채우고, 감소하면 데이터를 잘라내어 크기를 조절한다.
import numpy as np
# 1차원 배열 생성
arr1d = np.array([1, 2, 3, 4, 5, 6])
# resize 함수를 사용하여 크기를 조절 (데이터를 잘라냄)
resized_arr = np.resize(arr1d, (2, 2))
print("Original Array")
print(arr1d)
print("Resized Array (Data Trimmed)")
print(resized_arr)
Original Array
[1 2 3 4 5 6]
Resized Array (Data Trimmed)
[[1 2]
[3 4]]
실행 결과
원본 1차원 배열의 요소가 6개일 때 resize() 함수를 사용하여 2x2(총 4개의 원소)의 2차원 배열로 크기를 조절하면 위와 같이 나머지 원소 5,6이 잘리는 걸 확인할 수 있다.
resize() 함수를 사용하여 [1,2]의 원소를 가진 1차원 배열을 크기가 (3,5)인 2차원 배열로 변경하면, 원본 배열의 데이터를 반복하여 채워 넣는 예제를 살펴보자.
import numpy as np
# 1차원 배열 생성
arr1d = np.array([1, 2])
# resize 함수를 사용하여 크기를 조절 (데이터 반복)
resized_arr = np.resize(arr1d, (3, 5))
print("Original Array")
print(arr1d)
print("Resized Array (Data Repeated)")
print(resized_arr)
Original Array
[1 2]
Resized Array (Data Repeated)
[[1 2 1 2 1]
[2 1 2 1 2]
[1 2 1 2 1]]
실행 결과
3 x 5(총 15개의 원소)의 2차원 배열로 완성되기까지 원본 1차원 배열의 원소인 [1,2]가 계속 반복되는 걸 확인할 수 있다.
지금까지 resize() 함수에 대해 알아보았다. resize() 함수는 배열의 크기를 조절하고, 크기가 변할 때 데이터를 반복하여 채우거나 잘라내어 조절하는 데 사용되는 걸 확인했다. 그렇다면 어떤 상황에서 resize() 함수를 사용할 수 있을까?
- 이미지 처리 - 이미지 데이터를 다룰 때, 이미지의 크기를 변경하고 픽셀 값을 조절해야 할 때 resize() 함수를 사용할 수 있다.
- 데이터 정제 - 데이터 분석이나 머신러닝에서는 데이터의 형태를 표준화하기 위해 배열의 크기를 조절할 때가 있다. 이때 resize() 함수를 사용하여 데이터를 원하는 크기로 맞출 수 있다.
- 신경망에서 이미지 크기 조절 - 딥러닝에서는 입력 이미지의 크기를 모델에 맞게 조절할 필요가 있다. resize() 함수를 사용하여 이미지를 모델에 맞는 크기로 변환할 수 있다.
- 행렬 조작 - 특정 형태의 행렬이 필요한 경우, resize() 함수를 사용하여 원하는 모양으로 행렬을 조절할 수 있다.
다양한 상황에서 배열의 크기를 유연하게 조절하고 데이터를 처리할 때 resize() 함수가 유용하게 사용될 수 있다.
읽어주셔서 감사합니다.