首頁  >  文章  >  後端開發  >  如何使用 NumPy 將 2D 陣列分割成更小的 2D 陣列?

如何使用 NumPy 將 2D 陣列分割成更小的 2D 陣列?

DDD
DDD原創
2024-11-07 16:21:02601瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn