我目前有:
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')
答案 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