> 백엔드 개발 > 파이썬 튜토리얼 > NumPy를 사용하여 2D 배열을 더 작은 2D 배열로 분할하는 방법은 무엇입니까?

NumPy를 사용하여 2D 배열을 더 작은 2D 배열로 분할하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-07 16:21:02
원래의
719명이 탐색했습니다.

How to Slice a 2D Array into Smaller 2D Arrays with NumPy?

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

2D 배열을 더 작은 2D 배열로 분할해야 하는 경우가 많습니다. 예를 들어, 2x4 어레이를 두 개의 2x2 어레이로 나누는 작업을 생각해 보십시오.

해결책:

reshape와 swapaxes 기능의 조합은 다음 시나리오에서 효과적인 것으로 입증되었습니다.

import numpy as np

def blockshaped(arr, nrows, ncols):
    """
    Converts a 2D array into a 3D array with smaller subblocks.
    """
    h, w = arr.shape
    assert h % nrows == 0, f"{h} rows is not divisible by {nrows}"
    assert w % ncols == 0, f"{w} columns is not divisible by {ncols}"

    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))
로그인 후 복사

사용 예:

다음 배열을 고려하세요.

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

출력:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
로그인 후 복사

슬라이싱 더 작은 블록으로 배열:

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

출력:

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

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

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

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

추가 참고 사항:

  • unblockshape 기능을 사용하여 다음을 수행할 수 있습니다. 슬라이싱을 반대로 하세요.
  • Superbatfish의 blockwise_view는 고유한 형식으로 대안을 제공합니다.

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

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