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