簡體   English   中英

給定一個值隨時間的子區間,可以在函數中找到該模式的“相似實例”

[英]Given a subinterval of a value over time find “similar instances” of that pattern along the function

最近,有人要求我在一個函數中找到給定模式的實例(值隨時間變化),但是我不確定如何面對這個問題。

例如,如果給出以下情況,並且選擇的時間間隔為[0,1],我想找到該形狀的所有實例,即使它並不完全相等(模擬人眼的行為):

周期性功能

最好是我想用Python對其進行編碼,因此,非常感謝有關庫和/或框架的任何建議(當然還有已知的方法和算法)。

謝謝

相當簡單的方法是采用給定的模式,並將其作為數據在窗口中滑動,以找到模式與其下的數據之間的差異。 僅當形狀始終相同且大小相同時,這才是准確的。

演示..

設置數據:

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

在此處輸入圖片說明

您可以使用numpypython numpy / scipy曲線擬合 )來檢查點以擬合[0,1]區間上的曲線。 由此,您可以相對x軸進行偏移,以查看曲線是否“適合”曲線的任何其他部分。

例如,從[1,2]開始,它將是“偏移”:-1。 如果沒有上面的代碼示例,很難確切地介紹如何執行此操作,但是希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM