【问题标题】:Using cube.interpolate to go from theta levels to rho levels使用 cube.interpolate 从 theta 级别转到 rho 级别
【发布时间】:2017-08-01 14:40:36
【问题描述】:

我有一个在 theta 水平上的温度立方体,我需要一个在 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

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

【问题讨论】:

    标签: python-iris


    【解决方案1】:

    我相信您对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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2011-01-04
    • 2023-01-18
    • 2018-09-16
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多