NumPy 2D 배열을 더 작은 2D 배열로 어떻게 나눌 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-11-09 07:44:02
원래의
293명이 탐색했습니다.

How can I divide a NumPy 2D array into smaller 2D arrays?

2D 배열을 더 작은 배열로 분할

문제:
2차원 배열( 2D) NumPy 배열을 더 작은 2D 배열로 변환합니다. 예를 들어, 2x4 배열을 두 개의 2x2 배열로 변환할 수 있습니다.

해결책:
reshape와 swapaxes 기능의 조합을 사용하면 배열을 "블록"으로 나눌 수 있습니다. " 다음은 이를 달성하는 Python 구현입니다.

def blockshaped(arr, nrows, ncols):
    h, w = arr.shape
    assert h % nrows == 0, f"{h} rows is not evenly divisible by {nrows}"
    assert w % ncols == 0, f"{w} cols is not evenly divisible by {ncols}"

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

이 솔루션에서:

  • nrows 및 ncols는 각 작은 배열의 차원을 정의합니다.
  • 다음을 확인해야 합니다. 입력 배열은 이 값으로 균등하게 나누어질 수 있습니다.
  • reshape 함수는 배열을 다음과 같이 재배열합니다.
  • swapaxes 함수는 축을 교환하여 원하는 모양을 얻습니다.
  • 최종 모양 변경은 배열을 일련의 더 작은 블록으로 편평화합니다.

예:

다음 입력을 고려하세요. 배열:

c = np.arange(24).reshape((4, 6))

print(c)

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

nrows=2 및 ncols=3과 함께 블록 모양을 사용하면 이 배열을 다음 블록으로 분할할 수 있습니다.

print(blockshaped(c, 2, 3))

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

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

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

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

이 데모에서는 2D를 슬라이스하는 방법을 보여줍니다. 지정된 차원의 더 작은 직사각형 배열로 배열합니다.

위 내용은 NumPy 2D 배열을 더 작은 2D 배열로 어떻게 나눌 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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