NumPy에서 2D 배열을 더 작은 2D 배열로 분할
2D 배열로 표현된 이미지나 기타 데이터로 작업할 때 다음이 필요한 경우가 많습니다. 처리 또는 분석을 위해 더 작은 배열로 분할합니다. numpy에서는 reshape와 swapaxes 작업의 조합을 사용하여 이를 달성할 수 있습니다.
접근 방식을 이해하기 위해 예를 살펴보겠습니다. 2x4 배열 c:
c = np.arange(24).reshape((4, 6))
이 있고 이를 2개의 2x2 배열로 분할하려고 한다고 가정합니다. 첫 번째 블록은 처음 두 행과 처음 두 열의 요소로 구성되어야 하고, 두 번째 블록은 나머지 요소로 구성되어야 한다는 것을 알고 있습니다.
모양 변경 작업을 사용하면 배열을 새로운 모양으로 바꿀 수 있습니다. 이 경우에는 2x2x3입니다. 새 모양의 행과 열 수는 처음 두 인수로 지정되고 세 번째 인수인 -1은 모양 변경을 유효하게 만드는 데 필요한 치수를 계산하도록 numpy에 지시합니다.
c.reshape(2, 2, -1)
swapaxes 행과 열을 교환하여 원하는 블록 형식을 얻습니다.
c.reshape(2, 2, -1).swapaxes(1, 2)
마지막으로 두 번째 모양 변경을 사용하여 배열을 원하는 대로 평면화합니다. 모양:
c.reshape(2, 2, -1).swapaxes(1, 2).reshape(-1, 2, 2)
결과는 원하는 대로 2개의 2x2 배열입니다.
[[[ 0 1] [ 6 7]] [[ 2 3] [ 8 9]]] [[[12 13] [18 19]] [[14 15] [20 21]]]
제공된 코드에는 원하는 수의 블록에 대해 이 슬라이싱 접근 방식을 일반화하는 blockshape 함수가 포함되어 있습니다. :
def blockshaped(arr, nrows, ncols): return (arr.reshape(h//nrows, nrows, -1, ncols) .swapaxes(1, 2) .reshape(-1, nrows, ncols))
위 내용은 2D NumPy 배열을 더 작은 2D 배열로 분할하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!