ホームページ >バックエンド開発 >Python チュートリアル >NumPy で 2D 配列をより小さな 2D サブ配列にスライスするにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。