编程语言
首页 > 编程语言> > python – Xarray滚动意味着权重

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