Учитывая многомерный xarray DataArray, я хотел бы выполнить многомерное скользящее агрегирование. Например, если у меня есть DataArray, представляющий собой mxnxk, я хотел бы иметь возможность свернуть данные вдоль оси m и агрегировать измерение n или k.
У меня есть подход, который дает мнеправильный ответ, но, кажется, не в масштабе вообще. Если размеры моего окна малы, это выполнимо, но в случае массива данных 5000 x 2000 x 10 прокатка вдоль измерения длины 5000 с длинным окном взрывает память при моем текущем подходе.
import xarray as xr
import numpy as np
import pandas as pd
drange = pd.date_range(start='2000-01-01', freq='D', periods=5000)
x = ['x%i' % i for i in range(1, 3001)]
y = ['y%i' % i for i in range(1,11)]
raw_dat = np.random.randn(len(drange), len(x), len(y))
da = xr.DataArray(raw_dat, coords={'time': drange, 'x': x, 'y': y}, dims=['time', 'x', 'y'])
new_da = da.rolling(time=20).construct('window_dim')
final_da = new_da.stack(combo=['x', 'window_dim']).std('combo')
Я также попробовал приведенное ниже, он дает тот же результат, но также не хватает памяти при большом окне прокрутки.
new_da = da.rolling(time=20).construct('window_dim')
final_da = new_da.std(['x', 'window_dim'])
Приведенный выше код работает, и на моем компьютере для выполнения стека требуется примерно 35 секунди агрегация, но по мере увеличения размера окна, использование памяти взрывается. Мне интересно, есть ли более умный способ сделать этот тип агрегации.