2016-12-19 4 views
0

Недавно меня попросили найти экземпляры данного шаблона над функцией (значение с течением времени), но я не уверен о том, как решить эту проблему.Учитывая, что поднабор значения со временем находит «похожие экземпляры» этого шаблона вдоль функции

Например, если был указан следующий случай, а выбранный интервал времени был [0,1], я хотел бы найти все экземпляры этой формы, даже если это не совсем точно (эмулируя поведение человека) :

Periodic Function

Предпочтительно я хотел бы кодировать его в Python так что любые предложения о библиотеках и/или структур, которые могут быть полезны, (конечно, также известные методы и алгоритмы) будут очень высоко.

Благодаря

ответ

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

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

+0

очень интересный, хороший пример. – David542

0

Вы можете использовать что-то вроде numpy (python numpy/scipy curve fitting) для проверки точек, чтобы соответствовать кривой на отрезке [0,1]. Из этого вы можете сделать смещение от оси x, чтобы увидеть, соответствует ли кривая «любой другой части кривой».

Например, из [1,2] это будет смещение: -1. Без примера вышеприведенного кода трудно понять, как это сделать, но надеюсь, что это будет полезно.

Смежные вопросы