代码之家  ›  专栏  ›  技术社区  ›  manelmc

给定一个值随时间变化的子区间,沿函数查找该模式的“类似实例”

  •  0
  • manelmc  · 技术社区  · 8 年前

    最近,我被要求在函数中查找给定模式的实例(随时间变化的值),但我不确定如何面对这个问题。

    例如,如果给定以下情况,并且选择的时间间隔为[0,1],我希望找到该形状的所有实例,即使它不完全相等(模拟人眼行为):

    Periodic Function

    最好我想用Python来编写它,这样任何关于库和/或框架的建议都将非常有用(当然也包括已知的方法和算法)。

    谢谢

    2 回复  |  直到 8 年前
        1
  •  1
  •   Aaron    8 年前

    一种相当简单的方法是将给定的模式作为一个窗口在数据中滑动,找到模式和模式下数据之间的差异。只有当形状总是相同的大小和形状时,这才是准确的。

    演示。。

    设置数据:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(0,200,200)
    y = np.zeros_like(x)
    
    def addpeak(pos, y): #clipped triangular peak centered at pos (10 high, 20 wide)
        y += np.array([np.clip(10-abs(pos-x), 0, 5) for x in xrange(len(y))])
        return y
    
    y = addpeak(15,y)
    y = addpeak(40,y)
    y = addpeak(125, y)
    y = addpeak(100, y)
    y = addpeak(180, y)
    
    plt.plot(x,y) #visualize data

    enter image description here 然后取滑动窗口差

    window = y[5:25] #first peak is sliding window
    
    #you could take different difference formulas than simply linear
    difference = np.array([sum(window-y[i:i+20]) for i in xrange(len(y)-20)]) 
    
    plt.plot(x[:-20], difference) #note minimum difference might be offset based on window indexing
    #pick your faviorite way to find local minima

    enter image description here

        2
  •  0
  •   Community CDub    7 年前

    你可以用这样的东西 numpy ( python numpy/scipy curve fitting )检查点以拟合区间[0,1]上的曲线。由此,您可以对x轴进行偏移,以查看曲线是否“适合”曲线的任何其他部分。

    例如,从[1,2]开始,它将偏移:-1。如果没有上面的代码示例,很难精确地了解如何执行,但希望这有帮助。