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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 21:27:02710ブラウズ

How to Slice a 2D Numpy Array into Smaller 2D Arrays?

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

Numpy は、Python で多次元配列を操作するための多機能ライブラリです。特定のセクションを抽出するためのスライスなど、配列操作のためのさまざまな方法が提供されます。この記事では、提供された例をエミュレートして、2D 配列をより小さな 2D 配列にスライスするソリューションを検討します。

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

Reshape および Swapaxes のアプローチ

提案されたソリューションでは、reshape 関数と swapaxes 関数を活用して、希望通りのスライスを実現します。 reshape 関数は配列の形状を変更し、swapaxes 関数は指定された軸を交換します。次の Python コードでは、ブロック形状の関数がこのアプローチをカプセル化しています。

def blockshaped(arr, nrows, ncols):
    h, w = arr.shape
    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))

説明:

  • h, w = arr.shape: 次元を格納します。入力配列の arr.
  • arr.reshape(h//nrows, nrows, -1, ncols): 配列を 4 次元配列に再形成します。最初の 2 つの次元では、それぞれに nrows 行が含まれる h/nrows ブロックがあることが保証されます。 3 番目の次元は列を保持するために使用され、4 番目の次元には各ブロックに ncols 列があります。
  • swapaxes(1,2): 2 番目と 3 番目の次元を入れ替えます。これにより、行に沿ってブロックが効果的に並べ替えられ、 columns.
  • reshape(-1, nrows, ncols): 配列を希望の形状に再形成します。 h/nrows * w/ncols それぞれ nrows と ncols を持つ 2D 配列。

使用例

使用法を説明するために、サンプル配列 c:

np.random.seed(365)
c = np.arange(24).reshape((4, 6))
を考えてみましょう。

c を 2x3 にスライスするブロック:

sliced = blockshaped(c, 2, 3)

sliced は目的の 2D ブロックを保持します:

[[[ 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 配列にスライスする方法を示します。 reshape 関数と swapaxes 関数。画像やその他の行列を処理および操作するための柔軟で効率的なアプローチを提供します。

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

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