回答

1

我不確定你指的是什麼理論,在這些方法下,這些方法只是巧妙的數組操作(擾流板:numpy數組操作)。

  • 第一個,extract_patches_2d,超過extract_patches一個簡單的2 d的包裝,它調用

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

    和重塑的結果(source code)。

  • 第二個,extract_patches,也是一個包裝,這次是numpy.as_strided。它只准備2*n形狀和大步工作委託給

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

    這裏是它的source code

  • 什麼是真正有趣的是numpy.as_strided。從它的文檔:

    as_strided創建視圖到給出的精確的進步和 形狀的陣列。這意味着,它操縱 ndarray的內部數據結構,並且如果操作不當,該數組元素可以指向 無效存儲器並且可以損壞結果或程序崩潰。在計算新的 大步時,建議始終使用原始的x.strides以避免依賴連續的內存佈局,建議您使用 。

    因此,基本上,結果是在以上存儲器陣列相同的包裝物(一個視圖),其提供索引查找和每個索引正在考慮的特定區域內xnumpy.ndarray.view是核心numpy的功能,其允許查看現有陣列內部而不存儲器再分配。如果你想深入瞭解numpy的如何執行數組操作和看法,numpy internals是一個良好的開端。