Роллинг окно для 1D массивов в Numpy?
22908 просмотра
3 ответа
Есть ли способ эффективно реализовать скользящее окно для одномерных массивов в Numpy?
Например, у меня есть чистый фрагмент кода Python для вычисления скользящих стандартных отклонений для одномерного списка, где observations
это одномерный список значений и n
длина окна для стандартного отклонения:
stdev = []
for i, data in enumerate(observations[n-1:]):
strip = observations[i:i+n]
mean = sum(strip) / n
stdev.append(sqrt(250*sum([(s-mean)**2 for s in strip])/(n-1)))
Есть ли способ сделать это полностью в Numpy, то есть без каких-либо петель Python? Стандартное отклонение тривиально с numpy.std
, но часть скользящего окна полностью ставит меня в тупик.
Я нашел этот пост в блоге о скользящем окне в Numpy, но он не подходит для 1D-массивов.
Автор: c00kiemonster Источник Размещён: 13.11.2019 11:40Ответы (3)
53 плюса
Просто используйте код блога, но примените свою функцию к результату.
т.е.
numpy.std(rolling_window(observations, n), 1)
где у вас есть (из блога):
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
Автор: so12311
Размещён: 25.07.2011 02:17
2 плюса
def moving_avg(x,n):
mv = np.convolve(x,np.ones(n)/n,mode='valid')
return np.concatenate(([np.NaN for k in range(n-1)],mv))
Автор: Boris Wang
Размещён: 14.03.2019 09:35
0 плюса
Только с одной строкой кода ...
pd.Series(observations).rolling(n).std()
Автор: Marco Cerliani
Размещён: 08.10.2019 12:47
Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- python Звук Питона («Колокол»)
- numpy python.array против numpy.array
- numpy Как преобразовать изображение PIL в массив Numpy?
- numpy Есть ли функция NumPy, чтобы вернуть первый индекс чего-то в массиве?
- numpy Как мне создать пустой массив / матрицу в NumPy?
- numpy Как я могу использовать numpy.correlate для автокорреляции?
- numpy Какой самый простой способ расширить массив пустышек в 2 измерениях?
- window Как мне обработать событие закрытия окна в Tkinter?
- window Создать окно больше рабочего стола (разрешение экрана)
- window C # - Как я могу переименовать окно процесса, которое я начал?
- window Is there a way to detect if a browser window is not currently active?
- window Окно wpf полностью черное
- window Изменение места запуска окна WPF