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

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

DDD
リリース: 2024-11-07 16:21:02
オリジナル
712 人が閲覧しました

How to Slice a 2D Array into Smaller 2D Arrays with NumPy?

Numpy を使用して 2D 配列をより小さな 2D 配列にスライスする

多くの場合、2D 配列をより小さな 2D 配列に分割することが必要になります。たとえば、2x4 配列を 2 つの 2x2 配列に分割するタスクを考えてみましょう。

解決策:

このシナリオでは、reshape 関数と swapaxes 関数の組み合わせが効果的であることがわかります。

import numpy as np

def blockshaped(arr, nrows, ncols):
    """
    Converts a 2D array into a 3D array with smaller subblocks.
    """
    h, w = arr.shape
    assert h % nrows == 0, f"{h} rows is not divisible by {nrows}"
    assert w % ncols == 0, f"{w} columns is not 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)
ログイン後にコピー

出力:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
ログイン後にコピー

これをスライスします配列をより小さなブロックに分割します:

print(blockshaped(c, 2, 3))
ログイン後にコピー

出力:

[[[ 0  1  2]
  [ 6  7  8]]

 [[ 3  4  5]
  [ 9 10 11]]

 [[12 13 14]
  [18 19 20]]

 [[15 16 17]
  [21 22 23]]]
ログイン後にコピー

追加メモ:

  • unblockshape 関数は次の目的で使用できます。スライスを逆にします。
  • Superbatfish の blockwise_view は、独自の形式で代替手段を提供します。

以上がNumPy を使用して 2D 配列をより小さな 2D 配列にスライスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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