首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Curvillinear Dataset.swap_dims或ncks --rgr推断坐标变量规范选项

Curvillinear Dataset.swap_dims或ncks --rgr推断坐标变量规范选项
EN

Stack Overflow用户
提问于 2021-08-23 17:16:44
回答 1查看 26关注 0票数 0

我有一个以下形式的xarray.Dataset:

代码语言:javascript
复制
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仅支持此操作的单个变量版本。目前,我得到以下错误:

代码语言:javascript
复制
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它需要的所有信息,它应该不会正常工作。

目前有没有一种方法可以指定我想要在两个维度上覆盖两个坐标?文档确实说“类似于字典”,而不是“字典”,所以这里可能有一些灵活性。如果现在不支持这种行为,它是一个可行的特性吗?

需要明确的是,我想要以下类型的行为:

代码语言:javascript
复制
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推断“我想使用坐标而不是维度。这也可以解决问题,而且可能更简单。

我对“交换尺寸”或“交换坐标和尺寸”的搜索只显示了更改尺寸顺序的结果。

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68896581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档