2D 配列をより小さい配列にスライスする
問題:
2 次元配列 ( 2D) NumPy 配列をより小さな 2D 配列に変換します。たとえば、2x4 配列を 2 つの 2x2 配列に変換するとします。
解決策:
reshape 関数と swapaxes 関数を組み合わせると、配列を「ブロック」に分割できます。 」これを実現する Python 実装は次のとおりです。
def blockshaped(arr, nrows, ncols): 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))
このソリューションでは:
例:
次の入力を考えてみましょう。配列:
c = np.arange(24).reshape((4, 6)) print(c) [out]: [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]]
nrows=2 および ncols=3 でブロック形状を使用すると、この配列を次のブロックに断片化できます:
print(blockshaped(c, 2, 3)) [out]: [[[ 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 をスライスする方法を示します。配列を指定された次元の小さな長方形配列に変換します。
以上がNumPy 2D 配列をより小さな 2D 配列に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。