【问题标题】:How to use xr.apply_ufunc with changing dimensions如何使用 xr.apply_ufunc 改变尺寸
【发布时间】:2018-04-24 23:24:09
【问题描述】:

我有一个加载了 xarray 的 3 维气候数据集

climate = xr.open_dataset(data_file)
climate
<xarray.Dataset>
Dimensions:  (lat: 621, lon: 1405, time: 424)
Coordinates:
  * time     (time) datetime64[ns] 2017-11-01 2017-11-02 2017-11-03 ...
  * lon      (lon) float64 -125.0 -125.0 -124.9 -124.9 -124.8 -124.8 -124.7 ...
  * lat      (lat) float64 49.92 49.87 49.83 49.79 49.75 49.71 49.67 49.62 ...
Data variables:
  tmean    (time, lat, lon) float64 nan nan nan nan nan nan nan nan nan ...
  status   (time) object 'provisional' 'provisional' 'provisional' ...

我有一个应用于时间维度的模型,并返回一个仅包含纬度、经度的二维数组。

apply_model(climate.tmean.values).shape
(621, 1405)

如何在xr.apply_ufunc() 中使用它?我尝试了几种不同的方法,但它总是抱怨一些尺寸错误。

例如:

def apply_model_ufunc(climate):
    return xr.apply_ufunc(
            apply_model, climate,
            input_core_dims=[['lat','lon']])

apply_model_ufunc(climate)
ValueError: dimensions ('time',) must have the same length as the number of data dimensions, ndim=2

或者

def apply_model_ufunc(climate):
    return xr.apply_ufunc(
            apply_model, climate,
            input_core_dims=[['time','lat','lon']],
            output_core_dims=[['lat','lon']])

apply_model_ufunc(climate)
ValueError: operand to apply_ufunc has required core dimensions ['time', 'lat', 'lon'], but some of these are missing on the input variable:  ['lat', 'lon']

【问题讨论】:

  • 您能分享一下您的完整输入数据集是什么样的吗?
  • 我添加了直接调用数据集的输出

标签: python-3.x python-xarray


【解决方案1】:

经过更多的摆弄,我想我想通了。问题是apply_ufunc 会将函数应用于所有数据变量。我的数据集中的“状态”变量引起了问题,因为它只有时间维度。工作代码是

def apply_model_ufunc(climate):
    return xr.apply_ufunc(
            apply_model, climate,
            input_core_dims=[['time']],
            output_dtypes=[float])

apply_model_ufunc(climate['tmean'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多