如何解决xarray:动态选择数组缩减函数
将数组归约函数(例如 xarray.DataArray.mean
)包装到函数/方法中以允许动态选择归约函数的最佳方法是什么?
我提出的方法基本上是将一个函数传递给 xarray.DataArray.reduce
:
class AwesomeClass:
def __init__(self,xarray_obj):
self._obj = xarray_obj
def _reduce_by_10(self,fun,dim):
"""Reduce by steps of 10 over dim"""
obj = self._obj
"""
bunch of stuff happening here to obj
that's the same independent of the reduction
function
"""
for index in range(0,x[dim].size,10):
region = {dim: slice(index,index+10)}
yield obj.isel(region).reduce(fun,dim=dim)
def mean(self,dim="time"):
yield from self._reduce_by_10(np.mean,dim=dim)
def sum(self,dim="time"):
yield from self._reduce_by_10(np.sum,dim=dim)
# sample data if needed
arr = xr.DataArray(
np.random.RandomState(0).randn(2,3),[("x",["a","b"]),("y",[10,20,30])]
)
编辑:
不是将缩减函数传递给 _reduce_by_10
,我还可以将切片的 obj
返回给相应的方法,然后使用 { 的现有 .mean
/.sum
函数{1}}:
xarray.DataArray
重新表述我的问题:
- 使用
class AwesomeClass: def __init__(self,xarray_obj): self._obj = xarray_obj def _slice_by_10(self,index+10)} yield obj.isel(region) def mean(self,dim="time"): for obj in self._slice_by_10(dim): yield obj.mean(dim) def sum(self,dim="time"): for obj in self._slice_by_10(dim): yield obj.sum(dim)
是否等同于obj.reduce(np.mean,dim)
? - 以上两者之间有更好的方法吗?我不确定“双
obj.mean(dim)
”,我认为yield
更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。