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

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

DDD
DDD原創
2024-11-10 14:42:02787瀏覽

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

在NumPy 中將2D 陣列切片為較小的2D 陣列

處理表示為2D 陣列的影像或其他資料時,通常需要將它們切成更小的數組以進行處理或分析。在 numpy 中,這可以透過組合重塑和交換軸操作來實現。

為了理解方法,讓我們考慮一個範例。假設我們有一個 2x4 陣列 c:

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

並且我們想要切片為兩個 2x2 陣列。我們知道第一個區塊應包含前兩行和前兩列的元素,第二個區塊應包含其餘元素。

重塑運算可用來將陣列重塑為新形狀,在本例中為 2x2x3。新形狀中的行數和列數指定為前兩個參數,第三個參數 -1 告訴 numpy 計算必要的維度以使重塑有效。

c.reshape(2, 2, -1)

swapaxes then交換行和列以獲得所需的區塊格式:

c.reshape(2, 2, -1).swapaxes(1, 2)

最後,使用第二次重塑將陣列展平為所需的shape:

c.reshape(2, 2, -1).swapaxes(1, 2).reshape(-1, 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