준비하는 대학생

[NumPy] reshape 함수 본문

Programming/Machine learning

[NumPy] reshape 함수

Bangii 2023. 3. 13. 10:24

넘파이 배열은 reshape() 함수를 이용하여 배열의 크기를 변경하거나 차원을 추가/제거할 수 있습니다.

reshape() 함수

넘파이에서 reshape() 함수는 다음과 같이 정의됩니다.

numpy.reshape(arr, newshape, order='C')
  • arr: 변경하려는 배열
  • newshape: 변경하려는 배열의 새로운 shape
  • order: 배열의 요소 순서. 'C'(기본값)는 C 언어 스타일의 요소 순서, 'F'는 포트란 스타일의 요소 순서

 reshape() 함수는 arr 배열의 shape을 newshape으로 변경하여 새로운 배열을 반환합니다. 이때, 새로운 배열의 요소 개수는 원래 배열의 요소 개수와 동일해야 합니다. 만약 newshape으로 지정된 크기가 원래 배열의 크기와 다르면, reshape() 함수는 ValueError 예외를 발생시킵니다.

예제

다음은 reshape() 함수를 이용하여 1차원 배열을 2차원 배열로 변경하는 예제입니다.

import numpy as np

# 1차원 배열 생성
arr1d = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 2차원 배열로 변경
arr2d = np.reshape(arr1d, (3, 3))

print(arr2d)

 위의 코드에서는 넘파이 배열을 생성한 뒤 reshape() 함수를 이용하여 1차원 배열을 3x3 크기의 2차원 배열로 변경하고 있습니다. 실행 결과는 다음과 같습니다.

array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

또한, reshape() 함수를 이용하여 3차원 배열로 변경하는 예제는 다음과 같습니다.

import numpy as np

# 1차원 배열 생성
arr1d = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

# 3차원 배열로 변경
arr3d = np.reshape(arr1d, (2, 3, 2))

print(arr3d)

 위의 코드에서는 넘파이 배열을 생성한 뒤 reshape() 함수를 이용하여 1차원 배열을 2x3x2 크기의 3차원 배열로 변경하고 있습니다. 실행 결과는 다음과 같습니다.

array([[[ 1,  2],
        [ 3,  4],
        [ 5,  6]],

       [[ 7,  8],
        [ 9, 10],
        [11, 12]]])

 위의 예제에서는 1차원 배열을 reshape() 함수를 이용하여 2차원 배열 또는 3차원 배열로 변경하였습니다. 이처럼 reshape() 함수를 이용하여 배열의 크기를 변경하면, 배열의 차원과 모양을 유연하게 조절할 수 있습니다. 또한, 넘파이 배열의 shape를 변경하더라도 데이터의 메모리 위치는 변경되지 않으므로, 메모리를 효율적으로 사용할 수 있습니다.

주의사항

reshape() 함수를 사용할 때 주의해야 할 점은 다음과 같습니다.

  • 변경하려는 배열의 요소 개수와 newshape으로 지정된 크기의 요소 개수가 다를 경우 ValueError 예외가 발생합니다.
  • reshape() 함수를 사용하여 새로운 배열을 생성하더라도, 원래 배열과 동일한 메모리를 참조하게 됩니다. 이 경우, 새로운 배열의 값을 변경하면 원래 배열의 값도 함께 변경됩니다. 따라서, 새로운 배열과 원래 배열을 독립적으로 사용하려면 copy() 함수를 이용하여 새로운 배열을 생성해야 합니다.
  • reshape() 함수는 배열의 요소 순서를 변경하지 않습니다. 만약 배열의 요소 순서를 변경하고 싶다면 transpose() 함수를 이용하여 전치행렬을 생성하거나 flatten() 함수를 이용하여 1차원 배열로 변경한 뒤 요소 순서를 변경해야 합니다.

결론

 reshape() 함수는 넘파이 배열의 크기를 유연하게 변경할 수 있는 함수입니다. 이를 이용하여 배열의 차원과 모양을 조절하면, 배열 데이터를 효율적으로 다룰 수 있습니다. 그러나, 배열의 요소 개수와 newshape으로 지정된 크기의 요소 개수가 다르면 ValueError 예외가 발생하므로, 배열 크기를 변경할 때는 주의해야 합니다.

Comments