본문 바로가기
파이썬/파이썬기본문법

파이썬 numpy 배열 재구성

by flycoding 2023. 12. 10.
반응형

파이썬 numpy 배열 재구성

모양 변경은 배열의 모양을 변경하는 것을 의미한다.
배열의 모양은 각 차원에 있는 요소의 개수이다.
형상을 변경함으로써 차원을 추가하거나 제거하거나 각 차원의 요소 수를 변경할 수 있다.

 

파이썬 numpy 배열 1차에서 2차로 재구성

12개의 요소가 있는 다음 1-D 배열을 2-D 배열로 변환한다.
가장 바깥쪽 치수에는 4개의 배열이 있으며, 각 배열에는 3개의 요소가 있다:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("arr 1-d : \n", arr)

newarr = arr.reshape(4, 3)
print("newarr = arr.reshape(4,3)\n")

print("newarr 4-3 d : \n", newarr)

위의 코드를 실행하면 아래 그림과 같다.

파이썬 numpy 배열 재구성 reshape() 함수 활용 예제

 

 

파이썬 numpy 배열 1차에서 3차로 재구성

12개의 요소가 있는 다음 1-D 배열을 3-D 배열로 변환한다.
가장 바깥쪽 치수에는 3개의 배열이 포함된 2개의 배열이 있으며, 각 배열에는 2개의 요소가 있다:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("arr 1-d : \n", arr)

newarr = arr.reshape(2,3,2)
print("newarr = arr.reshape(2,3,2)\n")

print("newarr 2-3-2 d : \n", newarr)

위의 코드를 실행하면 아래 그림과 같다.

파이썬 numpy 배열 재구성 reshape() 함수 활용 예제

 

 

파이썬 numpy 배열을 임의의 모양으로 재구성할 수 있을까?

네, 모양을 바꾸는 데 필요한 요소들이 두 가지 모양이 동일하기만 하면 된다.

8개 요소 1D 배열을 2행 2D 배열의 4개 요소로 재구성할 수 있지만 3x3 = 9개 요소가 필요한 3개 요소 3행 2D 배열로 재구성할 수는 없다.

요소가 8개인 1D 배열을 각 차원에서 요소가 3개인 2D 배열로 변환해 본다(오류 발생):

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print("arr 1-d : \n", arr)

newarr = arr.reshape(3,3)
print("newarr = arr.reshape(3,3)\n")

print("newarr 3-3 d : \n", newarr)

위의 코드를실행하면 아래 그림과 같이 오류가 발생한다.

파이썬 numpy 배열 차원 재구성 reshape() 오류 예제

 

np.array([1,2,3,4,5,6,7,8.9])로 수정해서 reshape()을 실행하면 아래그림과 같이 재구성이 된다.

파이썬 numpy 배열 차원 재구성 reshape() 예제

 

 

파이썬 numpy 배열 copy or view를 반환?

반환된 배열이 복사본인지 또는 보기인지 확인한다:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print("arr : \n", arr)

print('arr.reshape(2, 4).base : ', arr.reshape(2, 4).base)

위의 예제는 원래 배열을 반환하므로 view(보기)이다.

위의 코드를실행하면 아래 그림과 같이 오류가 발생한다.

파이썬 numpy 배열 view 반환 활용 예제

 

 

파이썬 numpy 배열 알수 없는 차원

"알 수 없는" 차원을 하나 가질 수 있다.

모양 변경 방법에서 차수 중 하나에 대해 정확한 숫자를 지정할 필요가 없음을 의미한다.

-1을 값으로 통과하면 NumPy가 이 값을 계산해 준다.

8개 요소가 있는 1D 배열을 2x2 요소가 있는 3D 배열로 변환:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print("arr : \n", arr)

newarr = arr.reshape(2, 2, -1)
print('newarr = arr.reshape(2, 2, -1) ')

print("newarr : \n", newarr)

위의 코드를 실행하면 아래 그림과 같다.

-1을 1차원 이상으로 전달할 수 없다.

파이썬 numpy reshape() 활용 예제

 

 

파이썬 numpy 배열의 차원을 1차원 배열로 변환

평면 배열이란 다차원 배열을 1D 배열로 변환하는 것을 의미한다.

reshape(-1)를 사용하여 이 작업을 수행할 수 있다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
print("arr : \n", arr)

newarr = arr.reshape(-1)
print('newarr = arr.reshape(-1)')

print("newarr : \n", newarr)

위의 코드를 실행하면 아래 그림과 같다.

파이썬 numpy 배열 reshape(-1) 활용 예제

 

참고: numpy flatten, ravel 및 요소 rot90, flip, fliplr, flipud등의 배열 모양을 변경하기 위한 많은 기능이 있다. 

 

지금까지 파이썬 numpy 배열의 차원을 변환하는 reshape()에 대해서 살펴보았다.

꼭 손으로  눈으로 머리로 익히며 실습하기를 바란다.

모두 화이팅입니다.!!!

 

출처 : 이 글의 출처는 w3schools사이트를 참고하였으며 필자가 추가하여 정리한 글입니다.

반응형

댓글