答えて

1

私はあなたが参照する理論は、これらの方法はちょうど巧妙な配列操作です(スポイラー:numpy配列操作)参照するか分からない。

  • 第一extract_patches_2dは、

    extract_patches(image, 
           patch_shape=(p_h, p_w, n_colors), 
           extraction_step=1) 
    

    を呼び出し、その結果(source code)を再形成extract_patchesオーバーシンプル2-Dラッパーです。

  • 第2のものはextract_patchesであり、今回はnumpy.as_stridedを超えています。それだけで2*n形状を作成し、ここでそのsource code

    as_strided(arr, shape=shape, strides=strides) 
    

    にジョブを委任する跨ぎます。

  • 本当に興味深いのはnumpy.as_stridedです。それのドキュメントから:

    as_stridedは正確な進歩と 形状を与えられた配列へのビューを作成します。これは、 ndarrayの内部データ構造を操作し、誤って実行された場合、配列要素が 無効なメモリを指し、結果を破損したり、プログラムをクラッシュさせたりする可能性があることを意味します。隣接するメモリレイアウトへの依存を避けるために、新しい ストライドを計算するときは、元のx.stridesを常に使用することをお勧めします。 です。

    だから、基本的に、結果は、インデックス・ルックアップを提供し、メモリ内の同じアレイ上のラッパー(ビュー)であり、各インデックスはx内部特定の領域に探しています。 numpy.ndarray.viewは、メモリの再割り当てなしで既存の配列内を見ることを可能にするコアのnumpy関数です。 numpyが配列操作とビューをどのように実行するかについて詳しく調べるには、numpy internalsを開始するのがよいでしょう。

関連する問題