1

我有一个θ水平的温度立方体,我需要一个rho水平的温度立方体。cube.interpolate 能做到这一点,还是我需要别的东西?Iris 用户指南中的垂直重新网格化示例有一个从混合高度到固定等距高度采样点的示例,但没有目标网格具有空间变化高度的示例。我尝试了一种天真的方法,但它失败了。

sample_points = [p_rho_cube.coord('altitude').points]
t_rho_levs = temp.interpolate(sample_points, iris.analysis.Linear())

但这失败了:

Traceback (most recent call last):
  File "cmip5_lbc_gen_um.py", line 243, in <module>
    cmip_lbc_prep_um(pp_um_file, outfile)
  File "cmip5_lbc_gen_um.py", line 197, in cmip_lbc_prep_um
    t_rho_levs = temp.interpolate(sample_points, iris.analysis.Linear())
  File "/opt/scitools/environments/default/2017_06_07/lib/python2.7/site-packages/iris/cube.py", line 3811, in interpolate
    coords, points = zip(*sample_points)
ValueError: too many values to unpack

有没有一种简单的方法可以做到这一点,还是我必须为此编写自己的插值?

4

1 回答 1

0

我相信您建议的使用cube.interpolate是可疑的:第一个参数应该是 (coord, values) 的元组——查看文档字符串中的示例。

但是我也认为这无关紧要,因为您希望目标坐标值随位置而变化,正如您所说...

为此,您可能想要的是“python-stratify”: https
://github.com/SciTools-incubator/python-stratify 另一个优秀的 SciTools 产品!
但这仍然是相当实验性的,这就是它在“scitools-incubator”中的原因。

这应该是一个非常有效的计算,它确实允许您的目标值在其他维度上有所不同,我相信:在文档中,它说“z_target”参数可以是多维的,与“z_src”的形状相匹配。
https://github.com/SciTools-incubator/python-stratify/blob/569a92f3bec825e9edd08f416cce1d77fc0c96df/stratify/_vinterp.pyx#L446

奇怪的是,随附的解释性笔记本似乎并没有证明这一点。我隐约记得该操作在某些时候是“通用的”,所以这可能是在那之前编写的,需要更新。

于 2017-08-02T13:33:40.960 回答