使用 cube.interpolate 从 theta 水平到 rho 水平
Using cube.interpolate to go from theta levels to rho levels
我有一个 θ 水平的温度立方体,我需要一个 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
有没有简单的方法可以做到这一点,还是我必须为此编写自己的插值?
我认为您建议使用 cube.interpolate
是可疑的:第一个参数应该是 (coord, values) 的元组——查看文档字符串中的示例。
不过我也认为这无关紧要,因为你希望目标坐标值随位置而变化,正如你所说...
为此,您可能想要的是 "python-stratify" : https://github.com/SciTools-incubator/python-stratify
另一个优秀的 SciTools 产品!
但是这个仍然是实验性的,这就是它在 "scitools-incubator".
中的原因
这应该是一个非常有效的计算,它确实允许您的目标值在其他维度上有所不同,我相信:
在文档中,它说 'z_target' arg 可以是多维的,匹配 'z_src'.
的形状
https://github.com/SciTools-incubator/python-stratify/blob/569a92f3bec825e9edd08f416cce1d77fc0c96df/stratify/_vinterp.pyx#L446
奇怪的是,随附的说明性笔记本似乎并未证明这一点。依稀记得那个时候操作是'generalised',所以可能是在那之前写的,需要更新。
我有一个 θ 水平的温度立方体,我需要一个 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
有没有简单的方法可以做到这一点,还是我必须为此编写自己的插值?
我认为您建议使用 cube.interpolate
是可疑的:第一个参数应该是 (coord, values) 的元组——查看文档字符串中的示例。
不过我也认为这无关紧要,因为你希望目标坐标值随位置而变化,正如你所说...
为此,您可能想要的是 "python-stratify" : https://github.com/SciTools-incubator/python-stratify
另一个优秀的 SciTools 产品!
但是这个仍然是实验性的,这就是它在 "scitools-incubator".
这应该是一个非常有效的计算,它确实允许您的目标值在其他维度上有所不同,我相信:
在文档中,它说 'z_target' arg 可以是多维的,匹配 'z_src'.
的形状
https://github.com/SciTools-incubator/python-stratify/blob/569a92f3bec825e9edd08f416cce1d77fc0c96df/stratify/_vinterp.pyx#L446
奇怪的是,随附的说明性笔记本似乎并未证明这一点。依稀记得那个时候操作是'generalised',所以可能是在那之前写的,需要更新。