我有一个以下形式的xarray.Dataset:
Dimensions: (projection: 1, south_north: 1230, time: 48, west_east: 1269)
Coordinates:
* time (time) datetime64[ns] 2017-02-05T06:00:00 ... 2017-02-17
lon (south_north, west_east) float32 ...
lat (south_north, west_east) float32 ...
* west_east (west_east) float32 -457.4113 -455.40988 ... 2079.0415
* south_north (south_north) float32 -1184.8442 -1182.8433 ... 1273.5972
Dimensions without coordinates: projection
Data variables:
precip_bkt (time, south_north, west_east) float32 ...
Lambert_Conformal (projection) int32 ...south_north和west_east是来自Lambert Conformal投影的坐标(详细信息可以完全指定)。我没有创建这个文件,但据我所知,(lat,lon)和(west_east,south_north)之间应该有一个双射。因此,人们可能会使用类似于Dataset.swap_dims的东西来制作维度,并使用west_east和south_north来表示坐标。
但是,it looks like Dataset.swap_dims仅支持此操作的单个变量版本。目前,我得到以下错误:
ds.swap_dims({"west_east":"lon", "south_north":"lat"})
---------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-17-0a066deaef31> in <module>
----> 1 wrf_ds.swap_dims({"west_east":"lon", "south_north":"lat"})
~/miniconda3/envs/hv-gv-env/lib/python3.7/site-packages/xarray/core/dataset.py in swap_dims(self, dims_dict, inplace)
2150 raise ValueError('replacement dimension %r is not a 1D '
2151 'variable along the old dimension %r'
-> 2152 % (v, k))
2153
2154 result_dims = set(dims_dict.get(dim, dim) for dim in self.dims)
ValueError: replacement dimension 'lon' is not a 1D variable along the old dimension 'west_east'这是有道理的。我没有告诉swap_dims它需要的所有信息,它应该不会正常工作。
目前有没有一种方法可以指定我想要在两个维度上覆盖两个坐标?文档确实说“类似于字典”,而不是“字典”,所以这里可能有一些灵活性。如果现在不支持这种行为,它是一个可行的特性吗?
需要明确的是,我想要以下类型的行为:
ds.swap_dims(["south_north","west_east"]~["lon","lat"]) # specify a relationship between dims and coords \
#' I am not sure what a real pythonic syntax for this would be
Dimensions: (projection: 1, lat: 1230, time: 48, lon: 1269)
Coordinates:
* time (time) datetime64[ns] 2017-02-05T06:00:00 ... 2017-02-17
* lon (lon) float32 ...
* lat (lat) float32 ...
west_east (lat, lon) float32 -457.4113 -455.40988 ... 2079.0415
south_north (lat, lon) float32 -1184.8442 -1182.8433 ... 1273.5972
Dimensions without coordinates: projection
Data variables:
precip_bkt (time, lat, lon) float32 ...
Lambert_Conformal (projection) int32 ...我需要的尺寸是‘纬度’和‘经度’或‘纬度’和‘经度’,所以nco (ncks --rgr推断--rgr scrip...)可以生成网格描述文件进行网格重新划分。
如果有其他工具(如nco)可以解决这个问题,我也很感兴趣。也许还有一种方法可以告诉nco的"--rgr推断“我想使用坐标而不是维度。这也可以解决问题,而且可能更简单。
我对“交换尺寸”或“交换坐标和尺寸”的搜索只显示了更改尺寸顺序的结果。
非常感谢!
发布于 2021-08-24 23:19:03
你有没有试过,例如,
ncks --rgr infer#lat_nm=south_north#lon_nm=west_east#scrip=grd.nc in.nc foo.nc
作为文档记录的here
https://stackoverflow.com/questions/68896581
复制相似问题