xarray apply_ufunc获取每个变量的最小值和最大值

时间:2018-12-13 20:21:53

标签: python-xarray

我目前有:

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而是使用float?

我尝试过

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')

1 个答案:

答案 0 :(得分:2)

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

td

或者,您可以从应用函数返回一个数组元组,在这种情况下,您将从table.t01 th, table.t01 td { border: 4px solid black; border-collapse: collapse; } 中获得一个xarray对象元组:

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