NumPy 배열 재구조화

배열 재구성

재구성은 배열의 형태를 변경하는 것을 의미합니다。

배열의 형태는 각 차원의 요소 수입니다。

재구성을 통해 차원을 추가하거나 제거하고 각 차원의 요소 수를 변경할 수 있습니다。

1-D에서 2-D로 변환

예제

다음과 같은 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])
newarr = arr.reshape(4, 3)
print(newarr)

실행 예제

1-D에서 3-D로 변환

예제

다음과 같은 12개의 요소를 가진 1-D 배열을 3-D 배열로 변환합니다.

가장 외부의 차원은 2개의 배열을 가지고 있으며, 각 배열은 3개의 배열을 가지고 있으며, 각 배열은 2개의 요소를 포함합니다:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(2, 3, 2)
print(newarr)

실행 예제

어떤 형태로 변환할 수 있을까요?

네, 두 형태에서 요소가 같다면 가능합니다.

8개의 요소를 가진 1D 배열을 2행 2D 배열의 4개의 요소로 변환할 수 있습니다. 그러나 3x3 = 9개의 요소가 필요한 3행 3D 배열로 변환할 수는 없습니다.

예제

8개의 요소를 가진 1D 배열을 각 축에 3개의 요소를 가진 2D 배열로 변환하려고 시도합니다(에러가 발생할 수 있습니다):

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)

실행 예제

복사본이거나 뷰인가요?

예제

반환된 배열이 복사본인지 뷰인지 확인하세요:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr.reshape(2, 4).base)

실행 예제

위의 예제는 원래 배열을 반환하므로 뷰입니다.

알 수 없는 차원

“알 수 없는” 차원을 사용할 수 있습니다.

이는 reshape 메서드에서 하나의 차원에 정확한 숫자를 지정할 필요가 없다는 것을 의미합니다.

전달 -1 NumPy는 이 숫자를 대신 계산합니다.

예제

8개 요소의 1D 배열을 2x2 요소의 3D 배열로 변환합니다:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)

실행 예제

주의사항:전달할 수 없습니다 -1 두 개 이상의 차원에 전달됩니다.

배열 평면화

배열을 평면화하는 것은 다차원 배열을 1D 배열로 변환하는 것을 의미합니다.

사용할 수 있습니다 reshape(-1) 이를 통해 이루어집니다.

예제

배열을 1D 배열로 변환하려면:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr = arr.reshape(-1)
print(newarr)

실행 예제

주의사항:numpy flatten, ravel에서 배열 형태를 변경할 수 있는 많은 기능이 있으며, rot90, flip, fliplr, flipud 등의 요소를 다시 정렬할 수 있습니다. 이 기능들은 numpy의 중급에서 고급 부분에 해당합니다.