python – M-by-N shpae numpy.ndarray的滑动窗口
发布时间:2020-12-20 10:35:10 所属栏目:Python 来源:网络整理
导读:我有一个numpy形状(6,2) [[00,01],[10,11],[20,21],[30,31],[40,41],[50,51]] 我需要一个步长为1的滑动窗口,窗口大小为3喜欢这个: [[00,01,10,11,20,21,30,31,40,41,50,51]] 我正在寻找一个numpy解决方案.如果您的解决方案可以参数化原始数组的形状以及窗口
我有一个numpy形状(6,2)
[[00,01],[10,11],[20,21],[30,31],[40,41],[50,51]] 我需要一个步长为1的滑动窗口,窗口大小为3喜欢这个: [[00,01,10,11,20,21,30,31,40,41,50,51]] 我正在寻找一个numpy解决方案.如果您的解决方案可以参数化原始数组的形状以及窗口大小和步长,那就太好了. 我找到了这个相关的答案Using strides for an efficient moving average filter但是我没有看到如何指定那里的步长以及如何将窗口从3d折叠到连续的2d数组.这也是Rolling or sliding window iterator in Python,但是在Python中,我不确定它的效率如何.此外,它支持元素,但如果每个元素具有多个特征,则最终不会将它们连接在一起. 解决方法In [1]: import numpy as np In [2]: a = np.array([[00,51]]) In [3]: w = np.hstack((a[:-2],a[1:-1],a[2:])) In [4]: w Out[4]: array([[ 0,1,51]]) 您可以将其写为函数,如下所示: def window_stack(a,stepsize=1,width=3): n = a.shape[0] return np.hstack( a[i:1+n+i-width:stepsize] for i in range(0,width) ) 这并不真正取决于原始数组的形状,只要a.ndim = 2.请注意,我从不在交互式版本中使用任何长度.形状的第二个维度是无关紧要的;每行可以随意长.感谢@ Jaime的建议,你可以在不检查形状的情况下完成: def window_stack(a,width=3): return np.hstack( a[i:1+i-width or None:stepsize] for i in range(0,width) ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读