2D Numpy 배열을 더 작은 2D 배열로 분할하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-11 21:27:02
원래의
666명이 탐색했습니다.

How to Slice a 2D Numpy Array into Smaller 2D Arrays?

Numpy를 사용하여 2D 배열을 더 작은 2D 배열로 분할

Numpy는 Python에서 다차원 배열을 조작하기 위한 다목적 라이브러리입니다. 특정 섹션을 추출하기 위한 슬라이싱을 포함하여 배열 조작을 위한 다양한 방법을 제공합니다. 이 기사에서는 제공된 예제를 에뮬레이션하여 2D 배열을 더 작은 2D 배열로 분할하는 솔루션을 살펴봅니다.

[[1,2,3,4],   ->    [[1,2] [3,4]   
 [5,6,7,8]]          [5,6] [7,8]]
로그인 후 복사

Reshape 및 Swapaxes 접근 방식

제안 솔루션은 reshape 및 swapaxes 기능을 활용하여 다음을 수행합니다. 원하는 슬라이싱을 달성합니다. reshape 함수는 배열의 모양을 수정하고, swapaxes 함수는 지정된 축을 수정합니다. 다음 Python 코드에서 blockshape 함수는 이 접근 방식을 캡슐화합니다.

def blockshaped(arr, nrows, ncols):
    h, w = arr.shape
    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))
로그인 후 복사

설명:

  • h, w = arr.shape: 치수를 ​​저장합니다. 입력 배열의 arr.
  • arr.reshape(h//nrows, nrows, -1, ncols): 배열을 4차원 배열로 재구성합니다. 처음 두 차원은 각각 nrows개의 행을 포함하는 h/nrows 블록을 갖습니다. 세 번째 차원은 열을 보존하는 데 사용되며 네 번째 차원에는 각 블록에 ncols 열이 있습니다.
  • swapaxes(1,2): 두 번째 및 세 번째 차원을 스왑하여 행을 따라 블록을 효과적으로 치환하고 columns.
  • reshape(-1, nrows, ncols): h/nrows *로 구성된 원하는 모양으로 배열의 모양을 다시 바꿉니다. w/ncols 2D 배열, 각각 nrows 및 ncols 포함.

사용 예

사용 방법을 설명하려면 샘플 배열 c를 고려하세요.

np.random.seed(365)
c = np.arange(24).reshape((4, 6))
로그인 후 복사

슬라이싱 c를 2x3 블록으로:

sliced = blockshaped(c, 2, 3)
로그인 후 복사

슬라이스하면 유지됩니다. 원하는 2D 블록:

[[[ 0  1  2]
  [ 6  7  8]]

 [[ 3  4  5]
  [ 9 10 11]]

 [[12 13 14]
  [18 19 20]]

 [[15 16 17]
  [21 22 23]]]
로그인 후 복사

결론

이 솔루션은 reshape 및 swapaxes 기능을 사용하여 2D numpy 배열을 더 작은 2D 배열로 분할하는 방법을 보여줍니다. 이미지나 기타 행렬을 처리하고 조작하기 위한 유연하고 효율적인 접근 방식을 제공합니다.

위 내용은 2D Numpy 배열을 더 작은 2D 배열로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿