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 (将#修改为@)