xarray apply_ufunc 获取每个变量的最小值和最大值
xarray apply_ufunc to get the min and max for every variable
我目前有:
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']])
哪个returns:
<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) return 一个 numpy 数组而不是元组,并且 (2) 在 `output_core_dims:[= 中指定新的维度13=]
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
或者,您可以 return 来自应用函数的数组元组,在这种情况下,您将从 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)
我目前有:
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']])
哪个returns:
<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) return 一个 numpy 数组而不是元组,并且 (2) 在 `output_core_dims:[= 中指定新的维度13=]
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
或者,您可以 return 来自应用函数的数组元组,在这种情况下,您将从 apply_ufunc
:
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)