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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-08 07:08:02283瀏覽

How to Slice a 2D Array into Smaller 2D Subarrays in NumPy?

將 2D 陣列分割成更小的 2D 子數組

問題:

問題:我們可以將 2D陣列細分為較小的二維陣列在NumPy?

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

將一個2x4 陣列轉換為兩個2x2 陣列:

機轉:

更好的方法是重塑數組,而不是創建新數組使用 reshape() 現有數組並使用 swapaxes() 交換軸。

區塊函數:
def blockshaped(arr, nrows, ncols):
    """
    Partitions an array into blocks.

    Args:
        arr (ndarray): The original array.
        nrows (int): Number of rows in each block.
        ncols (int): Number of columns in each block.

    Returns:
        ndarray: Partitioned array.
    """
    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))

以下是區塊函數的實作函數:

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

print(blockshaped(c, 2, 3))

示範:

替代解決方案:SuperBatFish的 blockwise_view 提供了另一個選項,提供不同的區塊排列和基於視圖的表示。

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

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