Самый быстрый метод скользящего окна для даты и времениPython

Программы на Python
Anonymous
Самый быстрый метод скользящего окна для даты и времени

Сообщение Anonymous »

В настоящее время я пытаюсь применить немного запутанную функцию к скользящему окну продолжительностью 30 минут для данных времени в цикле и обнаружил, что это занимает слишком много времени, чтобы быть разумным.
Ниже я включил минимальный пример, который в настоящее время занимает 94 мс, что с учетом фактического размера набора данных и цикла, к сожалению, неосуществимо.

Код: Выделить всё

import pandas as pd
import numpy as np
from datetime import datetime,timedelta
import statsmodels.tsa.api as smt

def instrument_variance(ts): #Lernschow et al 2000
ts_acov = smt.acovf(ts)[:3] #Find first few lags of autocovariance
M_0 = ts_acov[0] #Get autocovariance at lag 0
M_fit = np.polyfit(range(3),ts_acov,1) #Get linear fit of the first few lags
M_lim0 = M_fit[0] #Get limit as fit goes to 0
var_inst = M_0-M_lim0 #Get error variance from M11(0)-lim>0(M11)
return var_inst

start = datetime.now()
base = datetime.today()
date_list = [base + timedelta(minutes=x) for x in range(100)]
df = pd.DataFrame(np.random.randint(0,100,size=(100, 3)), index=date_list,columns=list('ABC'))
df_cop = df.copy()

var_inst = df_cop.sort_index().rolling('30min',center=True,min_periods=3).apply(instrument_variance)
df = df.sort_index().rolling('30min',center=True,min_periods=3).var()
df = df.sub(var_inst) #Subtract uncorrelated var from total var to get correlated var
df = df.resample('5min').first()

timed = datetime.now()-start
print(timed)
Мои знания Python ограничены, и я знаю, что это сложно, но есть ли способы ускорить это?
Я прочитал следующие вопросы:
Самый эффективный с точки зрения вычислений/самый быстрый способ вычисления скользящей (линейной) регрессии в Python (Numpy или Pandas)
но мне трудно найти решение для окон на основе даты и времени. Я не могу писать код, предполагая, что моя частота дискретизации постоянна, поэтому я предпочитаю делать это, используя дату и время, а не целочисленную индексацию.

Вернуться в «Python»