加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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) )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读