- 积分
- 8807
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-5-23
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 eeeee 于 2019-6-4 20:41 编辑
今天在@astiny 的帖子中了解到了《用C语言开发的气象常用参数和物理量计算函数库》这篇有点古老的文献,花了些时间把C代码整理出来再用cython包装成python可以使用的模块。由于很多物理量的计算都需要迭代,用Python重写在速度上会有很大的劣势,而编译好的模块在Python中使用则可以体验到C一般的速度。
安装方法(需要C编译器):
- python setup.py build_ext --inplace
复制代码 在此目录新建Python解释器,即可import编译好的库。也可以把编译好的pyd文件放到你需要的地方作为模块import。
计算沙氏指数示例:
使用原始函数:
- >>> import pyqxmath as pq
- >>> pq.showalter_index(16.6, 0.6, -15.9)
- 1.099999999999886
复制代码
使用numpy.vectorize类进行函数的向量化,因此可以支持numpy.ndarray的直接运算。
使用向量化函数:
- >>> import pyqxmath as pq
- >>> import numpy as np
- >>> t8 = np.array([16, 17, 18])
- >>> td8 = np.array([2, 1, 0])
- >>> t5 = np.array([-16, -17, -18])
- >>> pq.vect.showalter_index(t8, td8, t5)
- array([ 0.56 , -0.48 , -1.5456])
复制代码 向量化函数和原始函数的名字是相同的。
可供Python使用的函数在pyqxmath.pyx中定义,由于文献中的函数名基本由拼音缩写而来,我在包装的过程中一般都会将其重命名成英文单词的组合,以方便记忆。函数的具体用法请参见paper文件夹里面的pdf文献。
目前可用的函数:
lcl_temperature, saturated_vapor_pressure, equivalent_potential_temperature, potential_temperature, total_air_energy_surface, total_air_energy, dewpoint_from_e, specific_humidity, relative_humidity, condensation_function, moist_lapse, water_vapor_flux, wind_to_uv, uv_to_wind, showalter_index, richardson_number, k_index
目前这个模块还处于非常早期的开发阶段,未来的计划有:
- 支持原C库中所有计算函数
- 支持numpy array的运算
- 完善函数的注释
备注:
由于原文献扫描质量较差,可能会有(很多)排版的bug,如遇到计算不合理的地方,请参考paper文件夹里的pdf进行修改并重新编译。
Github链接回复可见,祝大家使用愉快!再次感谢@astiny 提供的文献!
|
|