Hal*_*sen 1 python numpy python-xarray 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")
Run Code Online (Sandbox Code Playgroud)
然后根据应用将 data_m[0] 和 data_m[-1] 替换为 nans 等。
可以用 xarray 做类似的事情。我所做的(在这种情况下)是
xr.DataArray(data).rolling(dim_0=3, center=True).mean(dim="dim_0")
Run Code Online (Sandbox Code Playgroud)
但这对应于权重
weights = np.array([1, 1, 1])
Run Code Online (Sandbox Code Playgroud)
在 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)
Run Code Online (Sandbox Code Playgroud)
目前,我们正在努力支持更灵活(和更快)的滚动操作。见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)
Run Code Online (Sandbox Code Playgroud)
whereconstruct方法构造滚动对象的视图,其中窗口尺寸(window在上面的示例中命名)附加到最后一个位置。权重数组的内积给出了沿窗口维度的加权和。
| 归档时间: |
|
| 查看次数: |
1365 次 |
| 最近记录: |