【问题标题】:Rolling window on a circular array圆形阵列上的滚动窗口
【发布时间】:2016-02-05 10:21:46
【问题描述】:

我想将给定函数(特别是 np.std())应用于测量数组, 我想将它应用到给定大小的滚动窗口上。

但是 - 由于测量是在一个圆形数组中 - 我还需要滚动窗口能够从数组末端重叠到它的开头。

因此,我无法使用Rolling window for 1D arrays in Numpy? 中的答案...我尝试修改其方法,但我不是 numpy 专家,我无法理解 np.lib.stride_tricks.as_strided 的作用(它的文档在哪里???)

【问题讨论】:

    标签: python arrays numpy circular-list


    【解决方案1】:

    用足够的值填充原始数组以形成“伪圆形”数组。然后将rolling_window应用于伪圆数组:

    import numpy as np
    
    def rolling_window(a, window):
        # http://www.mail-archive.com/numpy-discussion@scipy.org/msg29450.html
        shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
        strides = a.strides + (a.strides[-1],)
        return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
    
    def circular_rolling_window(a, window):
        pseudocircular = np.pad(a, pad_width=(0, windowsize-1), mode='wrap')
        return rolling_window(pseudocircular, windowsize)
    
    a = np.arange(5)
    windowsize = 3
    print(circular_rolling_window(a, windowsize))
    

    产量

    [[0 1 2]
     [1 2 3]
     [2 3 4]
     [3 4 0]
     [4 0 1]]
    

    【讨论】:

    • 成功了——非常感谢!为简化起见,我只是将您的行 a = np.pad(a, pad_width=(0, windowssize-1), mode='wrap') 作为 rolling_window() 定义中的第一行插入
    • 这是个好主意;我已经编辑了我的帖子以使用它。由于 Erik Rigtorp 的“rolling_window”在 SO 上经常被引用,我给循环版本起了一个不同的名字。
    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 2018-09-25
    • 2018-06-22
    • 2020-07-01
    • 2012-10-29
    • 2023-01-27
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多