logo

Python의 numpy.reshape()

numpy.reshape() 함수는 NumPy 패키지에서 사용할 수 있습니다. 이름에서 알 수 있듯이 reshape는 '모양의 변화'를 의미합니다. numpy.reshape() 함수는 데이터를 변경하지 않고 배열에 새로운 모양을 가져오는 데 도움이 됩니다.

때로는 데이터를 넓은 형태에서 긴 형태로 재구성해야 할 때도 있습니다. 따라서 이 상황에서는 reshape() 함수를 사용하여 배열의 모양을 변경해야 합니다.

통사론

 numpy.reshape(arr, new_shape, order='C') 

매개변수

reshape() 함수에는 다음과 같은 매개변수가 있습니다.

1) 도착: array_like

이것은 ndarray입니다. 이것이 우리가 모양을 바꾸려는 소스 배열입니다. 이 매개변수는 필수적이며 numpy.reshape() 함수에서 중요한 역할을 합니다.

업캐스팅

2) new_shape: int 또는 int의 튜플

원래 배열을 변환하려는 모양은 원래 배열과 호환되어야 합니다. 정수인 경우 결과는 해당 길이의 1차원 배열이 됩니다. 하나의 모양 차원은 -1일 수 있습니다. 여기서 값은 배열의 길이와 나머지 크기로 근사화됩니다.

3) 순서: {'C', 'F', 'A'}, 선택 사항

이러한 인덱스 순서 매개변수는 reshape() 함수에서 중요한 역할을 합니다. 이러한 인덱스 순서는 소스 배열의 요소를 읽고 이 인덱스 순서를 사용하여 재구성된 배열에 요소를 배치하는 데 사용됩니다.

  1. 인덱스 순서 'C'는 마지막 축 인덱스가 가장 빠르게 변경되고 다시 첫 번째 축 인덱스가 가장 느리게 변경되는 C와 유사한 인덱스 순서를 사용하는 요소를 읽고 쓰는 것을 의미합니다.
  2. 인덱스 순서 'F'는 Fortran과 같은 인덱스 순서를 사용하는 요소를 읽고 쓰는 것을 의미합니다. 여기서 마지막 축 인덱스는 가장 느리게 변경되고 첫 번째 축 인덱스는 가장 빠르게 변경됩니다.
  3. 'C' 및 'F' 순서는 기본 배열의 메모리 레이아웃을 차지하지 않으며 인덱싱 순서만 참조합니다.
  4. 인덱스 순서 'A'는 arr이 메모리에서 연속적일 때 포트란과 같은 인덱스 순서로 요소를 읽고 쓰는 것을 의미하고, 그렇지 않으면 C와 같은 순서를 사용합니다.

보고

이 함수는 ndarray를 반환합니다. 가능하다면 새로운 뷰 객체입니다. 그렇지 않으면 복사본이 됩니다. 반환된 배열의 메모리 레이아웃은 보장되지 않습니다.

예시 1: C와 유사한 인덱스 순서

 import numpy as np x=np.arange(12) y=np.reshape(x, (4,3)) x y 

산출:

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

위의 코드에서

  • 별칭 이름이 np인 numpy를 가져왔습니다.
  • np.arrange() 함수를 사용하여 'a' 배열을 만들었습니다.
  • 변수 'y'를 선언하고 np.reshape() 함수의 반환 값을 할당했습니다.
  • 함수에 배열 'x'와 모양을 전달했습니다.
  • 마지막으로 arr의 값을 출력해 보았습니다.

출력에서 배열은 3개의 행과 4개의 열로 표시되었습니다.

예 2: C ravel과 동일하며 C reshape

 import numpy as np x=np.arange(12) y=np.reshape(np.ravel(x),(3,4)) x y 

ravel() 함수는 연속된 평면화된 배열을 만드는 데 사용됩니다. 입력 요소를 포함하는 1차원 배열이 반환됩니다. 복사본은 필요할 때만 만들어집니다.

내 브라우저 설정은 어디서 찾을 수 있어?

산출:

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

예시 3: 포트란과 유사한 인덱스 순서 지정

 import numpy as np x=np.arange(12) y=np.reshape(x, (4, 3), order='F') x y 

산출:

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

위의 코드에서

  • 별칭 이름이 np인 numpy를 가져왔습니다.
  • np.arrange() 함수를 사용하여 'a' 배열을 만들었습니다.
  • 변수 'y'를 선언하고 np.reshape() 함수의 반환 값을 할당했습니다.
  • 함수에 배열 'x'와 모양 및 Fortran과 유사한 인덱스 순서를 전달했습니다.
  • 마지막으로 arr의 값을 출력해 보았습니다.

출력에서 배열은 4개의 행과 3개의 열로 표시되었습니다.

예시 4: 포트란과 유사한 인덱스 순서 지정

 import numpy as np x=np.arange(12) y=np.reshape(np.ravel(x, order='F'), (4, 3), order='F') x y 

산출:

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

예시 5: 지정되지 않은 값은 2로 추론됩니다.

 import numpy as np x=np.arange(12) y=np.reshape(x, (2, -1)) x y 

위의 코드에서

  • 별칭 이름이 np인 numpy를 가져왔습니다.
  • np.arrange() 함수를 사용하여 'a' 배열을 만들었습니다.
  • 변수 'y'를 선언하고 np.reshape() 함수의 반환 값을 할당했습니다.
  • 함수에 배열 'x'와 모양(지정되지 않은 값)을 전달했습니다.
  • 마지막으로 arr의 값을 출력해 보았습니다.

출력에서 배열은 2개의 행과 5개의 열로 표시되었습니다.

산출:

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