Python 用Numpy编码模式

Python 用Numpy编码模式,python,numpy,Python,Numpy,我想找出时间序列中的上升/下降模式。这是我用来进行简单的上/下操作的: diff = np.diff(source, n=1) encoding = np.where(diff > 0, 1, 0) 对于具有给定回望长度且没有慢循环的模式,Numpy有没有办法做到这一点?例如,向上/向上/向上=0向下/向下/向下=1向上/向下/向上=2向上/向下/向下=3 谢谢你的帮助。我昨天从StackOverflow的一个答案中学到了np.lib.stride\u技巧。这是一个很棒的技巧,并不像我想

我想找出时间序列中的上升/下降模式。这是我用来进行简单的上/下操作的:

diff = np.diff(source, n=1)
encoding = np.where(diff > 0, 1, 0)
对于具有给定回望长度且没有慢循环的模式,Numpy有没有办法做到这一点?例如,向上/向上/向上=0向下/向下/向下=1向上/向下/向上=2向上/向下/向下=3


谢谢你的帮助。

我昨天从StackOverflow的一个答案中学到了
np.lib.stride\u技巧。这是一个很棒的技巧,并不像我想象的那么难理解。现在,如果您明白了,让我们定义一个名为
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))
然后,您可以计算模式匹配的索引

样本运行:
非常感谢你。老实说,步伐对我来说很难理解。但它是有效的。在我学会它之后,我理解了这种方式。它采用
形状
罢工
参数<代码>形状
非常简单,正如您所看到的,对于我新形成的数组,它是
(13,3)
。和
strips
由两个数字组成,
strips[0]
strips[1]
。第一个告诉我们在
bool_arr
中移动多少个单元格,以便在新数组中获得向上一行(x轴)的项值。第二个相同,仅适用于柱(y轴)。在这两种情况下,单元数均为1
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),)