在Meson中使用f2py编译Python扩展
最近想把自己修改过的一些 Fortran 代码放进自己的工具包 syize 中。因为一直用的是 meson 来打包 Python 包,所以研究了一下如何利用 meson 配合 f2py 来将 Fortran 代码编译成 Python 扩展。
欲望大过了能力,由此产生了焦虑
最近想把自己修改过的一些 Fortran 代码放进自己的工具包 syize 中。因为一直用的是 meson 来打包 Python 包,所以研究了一下如何利用 meson 配合 f2py 来将 Fortran 代码编译成 Python 扩展。
Fortran 是一门丑陋的语言。由于被 Fortran 折磨的不轻,我决定开一个帖子细数我觉的 Fortran 丑陋的地方。
Keras 中的TensorBoard回调可以方便的用来记录模型训练过程中的各种参数变化,以在训练后对模型进行分析。在 Keras 的官方示例中,展示了如何将TensorBoard回调用在自定义的 Keras 模型中。但是在实际使用中,如果你像我一样继承了写 PyTorch 的习惯,将整个 Keras 模型模块化成多个子模型的话,就会发现TensorBoard回调在这个时候失效了。这个时候就需要对TensorBoard回调的功能做增强,让它支持 Keras 模型中的子模型。
Zotero用来管理文献,以及向word中插入引用和参考文献表很好用,唯一美中不足的地方就是插入的引用点击以后不能跳转到相应的参考文献位置。Zotero的论坛上有很多相关的提问,并且有很多人给出了他们的VBA代码,用来完成相关的功能。但是我用下来发现在我的硕士论文中效果都很差,可能是用的引用格式不同的原因。gwyn-hopkins给出的代码相对简单易懂一些,于是我干脆对照着写出了一个Python版本的实现,通过pywin32操作word,完成相同的功能。经过对其功能不停的迭代更新,我将其整理成了 noterools 包。如果你感兴趣的话,可以去我的仓库看看。
wrfrun对WRF模式进行了封装,用户只需调用相应的Python函数即可运行相应的WRF程序。wrfrun会自动保存运行WRF使用的配置(例如各种namelist)和wrfrun配置,以帮助用户更好的管理WRF相关的设置。wrfrun还通过扩展提供了更多的功能,帮助用户更好地进行相关研究。
Click this card to see wrfrun documentations !
最近又有点犯懒了,甚至博客都有点懒得写,主要是感觉每次都要生成一次博客文件然后推送,真的很麻烦啊。我在笔记本上面配置好的环境,经常忘记同步到台式上,博客的源文件也经常忘记拉取更新,导致一些旧的博客莫名奇妙就消失了,还要我手动去提交记录里面找到文件恢复出来。于是索性研究了一下怎么用GitHub的Action自动生成和部署博客,一劳永逸。
在我为组里写的海雾反演工具包中,有一个葵花卫星数据下载的函数。因为葵花卫星数据是通过FTP方式下载的,而Python的requests库又不支持FTP协议,所以只好借助了pycurl来下载数据。
最近葵花数据的下载异常的慢,而pycurl似乎没有多线程下载的功能(我在撰写这篇发现pycurl中有一个CurlMulti对象,似乎可以通过该对象实现在一个Python进程中同时下载多个数据片段),pycurl对多线程的支持也不好,无奈只能自己想办法实现多进程下载的功能了。
最近在重构组里的代码上遇到一件稍微棘手的事情。导师的旧代码是使用Fortran编写的,其对一些Python无法方便读取的二进制数据做了非常精细的操作,导致将代码完全Python化的难度直线上升。折衷的方案是通过使用numpy.f2py工具,将Fortran代码转换成Python扩展,这样就引入了新的问题,如何将扩展的编译融合进Python包的打包和安装过程中。
meson构建系统是我在几个月前无意中了解到的新工具,其包含了能够帮助编译和打包的Python模块,并且现有的一些项目都已完全将meson作为后端,例如scipy,numpy。因此我决定将这作为一个练手的机会,使用meson来帮助构建这个Python包。