python – Xarray滚动意味着权重
作者:互联网
当我用numpy中的权重进行运行/滚动时,我例如做这样的事情:
data = np.random.random(100) # Example data...
weights = np.array([1, 2, 1])
data_m = np.convolve(data, weights/float(np.sum(weights)), "same")
然后用例如data_m [0]和data_m [-1]替换data_m [0]和data_m [-1]. nans,取决于应用程序.
使用xarray可以完成同样的事情.我做的(在这种情况下)是
xr.DataArray(data).rolling(dim_0=3, center=True).mean(dim="dim_0")
但这与权重相对应
weights = np.array([1, 1, 1])
在numpy的例子中.使用xarray时,如何应用其他权重?
解决方法:
加权滚动均值尚未在xarray中实现.
以下几乎完全相同,但它会很慢.
我认为使用np.convolve是目前最好的选择.
def weighted_sum(x, axis):
weight = [1, 2, 1]
if x.shape[axis] == 3:
return np.sum(x * weight, axis=axis)
else:
return np.nan
da.rolling(dim_0=3, center=True).reduce(weighted_sum)
目前,我们正在努力支持更灵活(和更快)的滚动操作.见https://github.com/pydata/xarray/pull/1837
编辑:
在xarray = 0.10.2的情况下,加权滚动平均值可以如下计算,
weight = xr.DataArray([0.25, 0.5, 0.25], dims=['window'])
da.rolling(dim_0=3, center=True).construct('window').dot(weight)
其中construct方法构造一个滚动对象的视图,其中窗口维度(上例中的命名窗口)被附加到最后一个位置.
具有权重数组的内积给出了沿窗口维度的加权和.
标签:python,numpy,python-xarray,xarray 来源: https://codeday.me/bug/20191005/1856657.html