最近我被要求在函数上找到给定模式的实例(随时间变化的值),但我不确定如何面对这个问题。
例如,如果给出以下情况,并且选择的时间间隔为[0,1],我想找到该形状的所有实例,即使它不完全相等(模仿人眼行为):
最好我想用Python编写代码,因此非常感谢任何有用的库和/或框架的建议(当然也包括已知的方法和算法)。
由于
答案 0 :(得分:1)
一个相当简单的方法可能是采用给定的模式并将其作为窗口滑过数据,找到模式与其下的数据之间的差异。如果形状总是相同的形状和相同的形状,这只会是准确的。
演示..
设置数据:
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
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
答案 1 :(得分:0)
您可以使用类似numpy
(python numpy/scipy curve fitting)的内容来检查点以适应区间[0,1]上的曲线。从那里,你可以从x轴做一个偏移,看看曲线是否适合'曲线的任何其他部分。
例如,从[1,2]它将是偏移:-1。如果没有上面的代码示例,很难准确地了解如何做到这一点,但希望这有用。