【问题标题】:xarray apply_ufunc to get the min and max for every variablexarray apply_ufunc 获取每个变量的最小值和最大值
【发布时间】:2018-12-13 20:21:53
【问题描述】:

我目前有:

xds = xr.tutorial.open_dataset('air_temperature')
xds['airx2'] = xds['air'] * 2

def _min_max(x):
    return np.min(x), np.max(x)

xr.apply_ufunc(_min_max, xds, input_core_dims=[['time', 'lat', 'lon']])

返回:

<xarray.Dataset>
Dimensions:  ()
Data variables:
   air      object (221.0, 317.4)
   airx2    object (442.0, 634.8)

如何扩展每个数据变量以具有最小/最大坐标或 min_air、max_air、min_airx2、max_airx2 数据变量,以便我不使用对象 dtype 而是使用浮点数?

我试过了

xr.apply_ufunc(_min_max, xds, input_core_dims=[['time', 'lat', 'lon']], output_core_dims=[['min', 'max']])

但它出错了:

ValueError: applied function returned data with unexpected number of dimensions: 0 vs 2, for dimensions ('min', 'max')

【问题讨论】:

    标签: python-xarray


    【解决方案1】:

    如果您想沿新维度展开,您需要 (1) 返回一个 numpy 数组而不是元组,并且 (2) 在 `output_core_dims: 中指定新维度:

    def _min_max(x):
        return np.array([np.min(x), np.max(x)])
    
    >>> xr.apply_ufunc(_min_max, xds, input_core_dims=[['time', 'lat', 'lon']],
    ...                output_core_dims=[['min_max']])
    <xarray.Dataset>
    Dimensions:  (min_max: 2)
    Dimensions without coordinates: min_max
    Data variables:
        air      (min_max) float32 221.0 317.4
        airx2    (min_max) float32 442.0 634.8
    

    或者,您可以从应用函数返回一个数组元组,在这种情况下,您将从apply_ufunc 得到一个xarray 对象元组:

    def _min_max(x):
        return np.min(x), np.max(x)
    
    >>> xr.apply_ufunc(_min_max, xds, input_core_dims=[['time', 'lat', 'lon']],
    ...                output_core_dims=[[], []])
    (<xarray.Dataset>
     Dimensions:  ()
     Data variables:
         air      float32 221.0
         airx2    float32 442.0, <xarray.Dataset>
     Dimensions:  ()
     Data variables:
         air      float32 317.4
         airx2    float32 634.8)
    

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2014-09-04
      • 2021-12-25
      相关资源
      最近更新 更多