>백엔드 개발 >파이썬 튜토리얼 >2D NumPy 배열을 더 작은 2D 배열로 분할하려면 어떻게 해야 합니까?

2D NumPy 배열을 더 작은 2D 배열로 분할하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-11-10 14:42:02827검색

How can I Slice a 2D NumPy Array into Smaller 2D Arrays?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.