今天早上花了一些时间寻找一个广义的问题来指出重复问题as_strided和/或如何制作通用窗口函数.关于如何(安全地)创建补丁,滑动窗口,滚动窗口,平铺或视图到阵列以进行机器学习,卷积,图像处理和/或数值积分,似乎存在很多问题.
我在寻找一个通用功能,可以接受window,step而且axis参数和返回一个as_strided超过任意维度视图.我将在下面给出我的答案,但我很感兴趣,如果有人能够制作更有效的方法,因为我不确定使用np.squeeze()是最好的方法,我不确定我的assert语句使函数足够安全以写入结果查看,我不知道如何处理axis不按升序排列的边缘情况.
尽职调查
我能找到的最通用的函数是sklearn.feature_extraction.image.extract_patches由@eickenberg编写的(以及显然是等价的skimage.util.view_as_windows),但是那些在网上没有很好地记录,并且不能在比原始数组中更少的轴上执行窗口(例如,这个问题要求在一个轴上有一定大小的窗口).通常,问题numpy只需要答案.
@Divakar在这里numpy为1-d输入创建了一个通用函数,但是更高维度的输入需要更多的关注.我在3d输入法上制作了一个裸骨2D窗口,但它不是很可扩展.