= np.empty(shape=len(arr))
for i in range(min_periods - 1, len(arr)):
result[i] = np.mean(arr[i - n + 1 : i + 1])
return result
@measure_execution("std takes: %s")
@numba.njit()
def std(y, label: str, n: int):
r = np.empty(shape=len(y))
m = numpy_rolling_mean(y, n, n)
for i in range(n,len(y)):
s = 0
mean = m[i]
if (np.isnan(mean)):
r[i] = np.nan
continue
for j in y[i-n:i]:
s += (j - mean) ** 2
r[i] = sqrt(s * (1/n))
return f'{label}_{n}', r
Есть такая функция, оптимизировал ее как смог, но выполняется она все равно долго
(31 секунду на 250к данных)
Хотелось бы получить что-то вроде 1-2 секунд
(До оптимизации было 37)
Это вообще возможно?
Блин нейминг жестокий у тебя( Вроде и не лень было почитать вникнуть, но в твоих y, m,s замучался тыркаться)
То есть взял массив посчитал rolling mean, дальше у тебя исходный массив и rolling mean для которых ты вычисляешь что-то вроде среднеквадратичного отклонения?
Я это к тому что неплохо бы немного комментить что делаешь в сообщении Ну и переменные конечно так называть не надо - очень тяжело воспринимается
def rstd(y,n): result = np.empty(len(y)-n+1) for i in range(len(y)-n+1): result[i] = np.std(y[i:i+n]) return f'rstd_{n}', result
Обсуждают сегодня