问题描述
是否有一种直接的方法可以从由 2D 纬度和经度变量描述的 Iris 立方体中提取区域,例如使用 NEMO 海洋模型数据?
我找到了 this 解决方法,但想知道是否有办法在“纯”Iris 中执行此操作,而不必求助于定义新函数?
例如,如果我有这个立方体...
In [30]: print(cube)
mole_concentration_of_dimethyl_sulfide_in_sea_water / (mol m-3) (time: 780; cell index along second dimension: 330; cell index along first dimension: 360)
Dimension coordinates:
time x - -
cell index along second dimension - x -
cell index along first dimension - - x
Auxiliary coordinates:
latitude - x x
longitude - x x
...然后尝试使用 intersection 提取一个区域,我明白了...
>>> subset = cube.intersection(longitude=(-10,10))
CoordinateMultiDimError: Multi-dimensional coordinate not supported: 'longitude'
谢谢!
解决方法
正如您从错误消息中看到的,iris 目前不支持按多维坐标进行子集化,因此您必须在该博文中编写一个类似于 bbox_extract_2Dcoords()
的函数。它所做的只是创建一个布尔掩码,其值在您感兴趣的区域内设置为 True
,在您感兴趣的区域外设置为 False
。然后将该区域的边界用作对立方体进行子集化的索引。
另一种方法是将数据重新网格化为由一维经度和纬度定义的规则网格,然后使用标准 Constraint()
方法对数据进行子集化。