我正在使用extract_patches_2d
和extract_patches
从2d图像中进行局部补丁提取,并且我希望有理论和参考资料来说明补丁提取的实现方法。
最佳答案
我不确定您指的是什么理论,实际上这些方法仅仅是聪明的数组操作(破坏者:numpy数组操作)。
第一个extract_patches_2d
是extract_patches
上的简单2D包装器,它调用
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
努力避免依赖连续的内存布局。
因此,基本上,结果是对内存中同一数组的包装(一个视图),该包装提供索引查找,并且每个索引都在
x
内部的特定区域中查找。 numpy.ndarray.view
是核心numpy函数,它允许在不重新分配内存的情况下查看现有阵列内部。如果您想深入了解numpy如何执行数组操作和视图,那么numpy internals是一个不错的起点。关于python - scikit-learn的extract_patches函数背后的理论/算法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46621786/