爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 199104|回复: 149

[源代码] 《用C语言开发的气象常用参数和物理量计算函数库》文献C代码的Python封装

  [复制链接]

新浪微博达人勋

发表于 2019-6-3 20:57:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 eeeee 于 2019-6-4 20:41 编辑

今天在@astiny帖子中了解到了《用C语言开发的气象常用参数和物理量计算函数库》这篇有点古老的文献,花了些时间把C代码整理出来再用cython包装成python可以使用的模块。由于很多物理量的计算都需要迭代,用Python重写在速度上会有很大的劣势,而编译好的模块在Python中使用则可以体验到C一般的速度。

1.png

安装方法(需要C编译器):
  1. python setup.py build_ext --inplace
复制代码
在此目录新建Python解释器,即可import编译好的库。也可以把编译好的pyd文件放到你需要的地方作为模块import。

计算沙氏指数示例:
使用原始函数:

  1. >>> import pyqxmath as pq
  2. >>> pq.showalter_index(16.6, 0.6, -15.9)
  3. 1.099999999999886
复制代码

使用numpy.vectorize类进行函数的向量化,因此可以支持numpy.ndarray的直接运算。
使用向量化函数:
  1. >>> import pyqxmath as pq
  2. >>> import numpy as np
  3. >>> t8 = np.array([16, 17, 18])
  4. >>> td8 = np.array([2, 1, 0])
  5. >>> t5 = np.array([-16, -17, -18])
  6. >>> pq.vect.showalter_index(t8, td8, t5)
  7. 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 提供的文献!
游客,如果您要查看本帖隐藏内容请回复


密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-6-3 21:07:00 | 显示全部楼层
超高速开发海星
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-6-3 21:10:39 | 显示全部楼层
astiny 发表于 2019-6-3 21:07
超高速开发海星

只用誊抄代码,不用自己想其实还是很快的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-6-3 21:17:07 | 显示全部楼层
好好学习,谢谢了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-6-3 22:01:45 | 显示全部楼层
你为何,如此突出?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-6-4 00:50:29 | 显示全部楼层
楼主威武
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2019-6-4 08:07:50 | 显示全部楼层
楼主棒棒的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-6-4 08:33:53 | 显示全部楼层
楼主的工作很好
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-6-4 08:39:10 | 显示全部楼层
nice, 大佬
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2019-6-4 08:58:33 | 显示全部楼层
大佬就是大佬
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表