Xarray - 将数据变量转换为维度

3

我正在处理大量的温度数据,这些数据是在不同的经纬度下测得的,我可以像下面这样从NetCDF文件中打开它。

<xarray.Dataset>
Dimensions:            (altitude: 801, measurement_number: 3180)
Coordinates:
   * altitude           (altitude) float64 0.0 100.0 200.0 300.0 400.0 500.0 ...
Dimensions without coordinates: measurement_number
Data variables:
    temperature        (measurement_number, altitude) float32 ...
    longitude          (measurement_number) float64 ...
    latitude           (measurement_number) float64 ...

为了更方便地评估结果,我希望将变量“longitude”和“latitude”更改为类似于维度或坐标的形式。
<xarray.Dataset>
Dimensions:            (altitude: 801, measurement_number: 3180, longitude: 36, latitude: 18)
Coordinates:
   * altitude           (altitude) float64 0.0 100.0 200.0 300.0 400.0 500.0 ...
   * longitude          (longitude) float64 -180, -170, -160 ...
   * latitude           (latitude) float64 -90, -80, -70, ...
Dimensions without coordinates: measurement_number
Data variables:
    temperature        (measurement_number, altitude, longitude, latitude) float32 ...

我尝试使用ds.set_coords(['longitude','latitude'])和许多不同的函数来到这里,但我无法使温度依赖于经度和纬度。您能给我一个提示如何解决这个问题吗?

1个回答

3
你见过xarray中的Multi-index功能吗?它可能不完全符合你的要求,而且存在一些限制(例如,据我所知,尚不支持将其序列化为netCDF),但也许这对你来说没关系。这个想法是将measurement_number转换为带有纬度和经度虚拟坐标的pandas多级索引。 然后,你可以在多级索引坐标上使用.sel -> Multi-level indexing

1
谢谢您的回答!这种方法真的很好用。我引入了Multi-Index,然后对其进行了unstack操作: ds = ds.set_index(n_event=['longitude','latitude']) ds = ds.unstack('n_event')我必须对其进行unstack操作,因为我想要在所有经度上取平均值,并将文件保存回netCDF文件中: ds = ds.mean(dim='n_event') ds.to_netcdf('combinedlatlon.nc')但是,在文件保存之前,我总是会遇到内存错误。我猜现在我需要更深入地了解dask和分块技术。 - magon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接