首頁 >後端開發 >Python教學 >如何將 2D Numpy 陣列分割成更小的 2D 陣列?

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

Susan Sarandon
Susan Sarandon原創
2024-11-11 21:27:02739瀏覽

How to Slice a 2D Numpy Array into Smaller 2D Arrays?

使用 Numpy 將 2D 陣列分割成更小的 2D 陣列

Numpy 是一個用於在 Python 中操作多維數組的多功能函式庫。它提供了多種數組操作方法,包括切片以提取特定部分。本文探討了一種將2D 數組切片為更小的2D 數組的解決方案,模擬提供的示例:

[[1,2,3,4],   ->    [[1,2] [3,4]   
 [5,6,7,8]]          [5,6] [7,8]]

重塑和交換軸方法

建議的解決方案利用重塑和交換軸函數達到想要的切片效果。 reshape 函數修改陣列的形狀,而 swapaxes 函數交換指定的軸。在下面的Python程式碼中,blockshape函數封裝了這個方法:

def blockshaped(arr, nrows, ncols):
    h, w = arr.shape
    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))

說明:

  • h, w = arr.shape:儲存維度輸入數組arr.
  • arr.reshape(h//nrows, nrows, -1, ncols):將陣列重塑為 4 維數組。前兩個維度確保它有 h/nrows 區塊,每個區塊包含 nrows 行。第三個維度用於保留列,第四個維度在每個區塊中有 ncols 列。
  • swapaxes(1,2):交換第二個和第三個維度,這可以有效地沿行排列區塊,並且columns.
  • reshape(-1, nrows, ncols) :將陣列重塑回所需的形狀,由h/nrows * 組成w/ncols 二維數組,每個數組都有nrows 和ncols。

範例用法

為了說明用法,請考慮範例陣列c:

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

切片c 成2x3 區塊:

sliced = blockshaped(c, 2, 3)

切片c 成2x3 區塊:

[[[ 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區塊:

結論此解示範如何使用 reshape 和 swapaxes 函數將 2D numpy 陣列切片為更小的 2D 陣列。它提供了一種靈活且高效的方法來處理和操作影像或其他矩陣。

以上是如何將 2D Numpy 陣列分割成更小的 2D 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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