问题描述
将数组归约函数(例如 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 (将#修改为@)