NumPy 2D 配列をより小さな 2D 配列に分割するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-09 07:44:02
オリジナル
293 人が閲覧しました

How can I divide a NumPy 2D array into smaller 2D arrays?

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))
ログイン後にコピー

このソリューションでは:

  • nrows と ncols は、それぞれの小さい配列の次元を定義します。
  • 必ず確認する必要があります。入力配列がこれらの値で均等に割り切れることを確認します。
  • reshape 関数は、配列をブロックに分割します。
  • swapaxes 関数は、軸を交換して目的の形状を取得します。
  • 最後の再形状は、配列を一連の小さなブロックに平坦化します。

例:

次の入力を考えてみましょう。配列:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート