首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用scipy.stats拟合xarray DataArray

使用scipy.stats拟合xarray DataArray
EN

Stack Overflow用户
提问于 2018-07-27 21:19:14
回答 1查看 673关注 0票数 0

我想要计算xarray.DataArray时间维上拟合的统计分布的参数。

我想要创建一个函数,其功能如下:

代码语言:javascript
复制
from scipy import stats
import xarray as xr

def fit(arr):
    return xr.apply_ufunc(stats.norm.fit, arr, ...)

它返回一个新的DataArray,存储在时间维度上计算的分布的两个参数。因此,如果输入具有维度(时间、lat、lon),则fit将返回具有维度(params、lat、lon)的DataArray。下一步是使用这些参数计算各种百分位数(例如,stats.norm.ppf)。

在许多不成功的试验之后,我怀疑apply_ufunc支持这个用例,我更愿意用

代码语言:javascript
复制
params = np.apply_along_axis(stats.norm.fit, arr.get_axis_num('time'), arr.data)

然后手动创建DataArray,复制维度和属性。

有什么想法?有什么建议吗?

下面是我最后做的事情,感觉有点像黑客:

代码语言:javascript
复制
# Fit the parameters (lazy computation)
data = dask.array.apply_along_axis(dc.fit, arr.get_axis_num('time'), arr)

# Create a DataArray with the desired dimensions to copy them over to the parameter array.
mean = arr.mean(dim='time', keep_attrs=True)
coords = dict(mean.coords.items())
coords['dparams'] = ([] if dc.shapes is None else dc.shapes.split(',')) + ['loc', 'scale']
out = xr.DataArray(data=data, coords=coords, dims=(u'dparams',) + mean.dims)
out.attrs = arr.attrs
EN

回答 1

Stack Overflow用户

发布于 2018-07-29 21:28:28

Dask阵列包括一个类似于轴心,可能是最明显的起点。请注意,具有块集的xarray的每个变量都会自动将dask数组封装在.data属性中。您甚至可以直接传递xarray变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51565708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档