ホームページ >バックエンド開発 >Python チュートリアル >NumPy で 2D 配列をより小さな 2D サブ配列にスライスするにはどうすればよいですか?

NumPy で 2D 配列をより小さな 2D サブ配列にスライスするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 07:08:02285ブラウズ

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

2D 配列をより小さい 2D サブ配列に分割する

質問:
2D 配列をより小さい 2D サブ配列に分割できますか2D 配列NumPy?

例:
2x4 配列を 2 つの 2x2 配列に変換します:

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

メカニズム:

新しい配列を作成する代わりに、既存の配列を再形成する方が良い方法です。 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。