【问题标题】:Encoding for patterns with Numpy使用 Numpy 对模式进行编码
【发布时间】:2020-12-21 13:01:35
【问题描述】:

我想在时间序列中找到向上/向下模式。这是我用于简单向上/向下的:

diff = np.diff(source, n=1)
encoding = np.where(diff > 0, 1, 0)

Numpy 有没有办法在没有慢循环的情况下对具有给定回溯长度的模式执行此操作?例如 up/up/up = 0 down/down/down = 1 up/down/up = 2 up/down/down = 3.....

感谢您的帮助。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    我昨天从 StackOverflow 的一个答案 similar to this 中了解到 np.lib.stride_tricks.as_strided。这是一个很棒的技巧,并不像我预期的那样难以理解。现在,如果你明白了,让我们定义一个名为 rolling 的函数,列出所有要检查的模式:

    def rolling(a, window):
        shape = (a.size - window + 1, window)
        strides = (a.itemsize, a.itemsize)
        return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
    
    compare_with = [True, False, True]
    bool_arr = np.random.choice([True, False], size=15)
    paterns = rolling(bool_arr, len(compare_with))
    

    然后你可以计算模式匹配的索引as discussed here

    idx = np.where(np.all(paterns == compare_with, axis=1))
    

    示例运行:

    bool_arr
    array([ True, False,  True, False,  True,  True, False, False, False,
           False, False, False,  True,  True, False])
    patterns
    array([[ True, False,  True],
           [False,  True, False],
           [ True, False,  True],
           [False,  True,  True],
           [ True,  True, False],
           [ True, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False],
           [False, False,  True],
           [False,  True,  True],
           [ True,  True, False]])
    idx
    (array([ 0,  2, 13], dtype=int64),)
    

    【讨论】:

    • 非常感谢。老实说,我很难理解跨步。但它的工作原理。
    • 学了之后,我是这样理解strides的。它需要shapestrikes 参数。 shape 非常简单,正如您所看到的,它是 (13, 3) 用于我形成的新数组。而strides 由两个数字组成,strides[0]strides[1]。第一个告诉我们在bool_arr 中移动了多少个单元格,以便在新数组中获得向上一行(x 轴)的 item 值。第二个是相同的,仅用于列(y 轴)。在这两种情况下,单元格的数量都是 1
    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多