因为正在用 Python 写 lattice Boltzmann 的原因,我时不时也会研究 Python 科学计算程序的加速方法。现在为止,陆续尝试过了几个方案,包括 numexpr、Cython 等等,也写了一些博文(1、2)。而这篇文章,则是要作一个推荐,建议所有在使用 Python 做科学计算的人尝试一下 Numba。

推荐的原因,首先得从 Python 科学计算说起。

Python 本身由于其动态语言的本质,并不适合于计算量很大的科学计算。然而 Numpy 提供的带类型的数据结构,以及预编译好的基于 C 或 Fortran 的高速计算库,很大程度上解决了这个问题。绝大部分基于 Python 的科学计算程序,都是将其数据储存在 ndarray 里的。按我自己目前的认识,Numpy 至少带来了两个方面的好处,一是存储的数据带有类型,Python 不再需要动态地猜测变量的数据类型;二是提供了一系列高速的 ufunc,可以快速地对大规模的数组进行运算操作。

Numpy 提供的 ndarray 以及 ufunc 在有些情况下是足够应付一些简单的计算逻辑的,比如 Palabos 官网提供的圆柱绕流的代码。按 Palabos 自己的说法,这个代码短得惊人,而且速度也非常快。

但是,总会有一些情况是用简单的数组没法完成的。至少有两种典型的情况。其一是沿时间的迭代,后一步依赖前一步的结果。即使每一个时间步中的计算量都不大,但所有的时间步不能或者很难做成一个简单的数组计算。另一种情况是确实是基于数组的计算,但计算逻辑比较复杂,没法用简单的数组算式来完成,比如 LBM 中的碰撞迁移如果有非规则障碍物就很难用数组简单表达了。

这种时候,最直接的解决办法是,回到写 C 的方法中来,写循环然后一个元素一个元素地算。Numba、Numexpr 属于直接在 Python 程序基础上作修改来实现加速的,Cython 以及直接写 Fortran 或 C 扩展都属于充分利用 Python 脱水语言特性的办法。按照这篇13年的文章的测试,它们的速度没有太大的区别。

如果速度没有太大区别的话,对我们这种应用语言来计算,而不是专门研究高效计算的人来说,简便、可靠成了最重要的考量因素。而这,也正是我推荐 Numba 的最主要的原因。与 Cython 相比,Numba 在编写的时候与 Cython 是非常类似的,甚至比它还要简洁(不等于简单),因为不用声明变量类型。

然而 Numba 有一些非常明显的优势。

首先,Cython 有一些普通人不一定知道的优化技巧,比如关闭 boundscheck 等,Numba 中则不需要考虑这些问题。前面提到的那篇文章的结果来看,Cython 即使高度优化,在速度上也没有优势,甚至可能更慢。

然后,Numba 在语言层面上还完全是 Python,而不是像 Cython 一样是一种杂交的语言。当然两者都基本是按照 C 的逻辑在写,比如大量出现的嵌套循环(这在纯 Python 脚本中是不可想象的)。

如果说上一条还是一个洁癖的话,这一条则是 Numba 明显优势的地方:Numba 对源程序的修改很小,几乎是只需要加一个 @jit 修饰符就可以了。而 Cython 相对来说就麻烦不少,要额外编译,pyx 文件也有一些讲究,比如还需要 cimport numpy 之类。

最后,Numba 可以以 GPU 或多核 CPU 为目标编译代码,实现方式同样十分简单。

简而言之,Numba 提供的方案,不比别的速度慢,但实现起来要方便不少。既然如此,为何不用它呢?我反正已经全面从 Cython 迁移过来了。

推荐使用Numba加速Python科学计算相关推荐

  1. python 科学计算基础教程电子版-Python 科学计算基础 (整理)

    Python是一种面向对象的.动态的程序设计语言,具有非常简洁而清晰的语法,既可以用于快速开发程序脚本,也可以用于开发大规模的软件,特别适合于完成各种高层任务. 随着NumPy.SciPy.matpl ...

  2. python sum函数numpy_如何用numba加速python?

    我把写好的markdown导入进来,但是没想到知乎的排版如此感人.如果对知乎排版不满想要看高清清爽版,请移步微信公众号原文 如何用numba加速python?同时欢迎关注 前言 说道现在最流行的语言, ...

  3. python numba_如何用numba加速python?

    我把写好的markdown导入进来,但是没想到知乎的排版如此感人.如果对知乎排版不满想要看高清清爽版,请移步微信公众号原文 如何用numba加速python?同时欢迎关注 前言 说道现在最流行的语言, ...

  4. 目前比较流行的Python科学计算发行版

    经常有身边的学友问到用什么Python发行版比较好? 其实目前比较流行的Python科学计算发行版,主要有这么几个: Python(x,y) GUI基于PyQt,曾经是功能最全也是最强大的,而且是Wi ...

  5. python科学计算基础教程pdf下载-Python科学计算基础教程_PDF电子书

    因资源下载地址容易失效,请加微信号359049049直接领取,直接发最新下载地址. 前言 ======================================================= ...

  6. python科学计算基础教程pdf下载-python科学计算 第二版 PDF 下载

    相关截图: 资料简介: 本书详细介绍Python科学计算中最常用的扩展库NumPy.SciPy.matplotlib.Pandas.SymPy.TTK.Mayavi.OpenCV.Cython,涉及数 ...

  7. Python科学计算之Pandas基础学习

    Python科学计算之Pandas基础学习 导入Pandas 我们首先要导入我们的演出明星--Pandas. 这是导入Pandas的标准方式.显然,我们不希望每时每刻都在程序中写'pandas',但是 ...

  8. python 科学计算设计_《Python科学计算-(第2版)》怎么样_目录_pdf在线阅读 - 课课家教育...

    第1章 Python科学计算环境的安装与简介 1 1.1 Python简介 1 1.1.1 Python 2还是Python 3 1 1.1.2 开发环境 2 1.1.3 集成开发环境(IDE) 5 ...

  9. python科学计算第三版-Python科学计算PDF

    Python科学计算(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VYs9BamMhCnu4rfN6TG5bg 提取码:2zzk 复制这段内容后打开百度网盘手机A ...

  10. Numba加速Python教程

    Numba加速Python代码教程 Numba介绍 Numba可运行环境 Numba安装 Numba教程 Numba简单示例 Numba装饰器 Numba理解 什么是nopython模式? 如何衡量N ...

最新文章

  1. 韩磊老师与C#编程风格
  2. java mysql 线程安全_java连接mysql的线程安全问题
  3. 面试必会系列 - 1.8 Spring IOC / AOP原理
  4. Angular、React、Vue.js 等 6 大主流 Web 框架都有什么优缺点?
  5. 使用计算机仿真的作用是什么,计算机仿真及其在制造业中的应用
  6. sap相关性不能被编译_经典综述编译丨生物硝化抑制丨NAT PLANTS:现代农业中的氮转化和生物硝化抑制作用...
  7. 魔众Markdown管理系统v2.1.0源码
  8. 稀缺PSD分层质感男模特男装电商海报
  9. JS框架设计之对象类型判断一种子模块
  10. android面试经典,Android经典面试题集锦(一)
  11. 域名扫描linux,ksubdomain 无状态域名爆破工具
  12. 分布式存储数据库的Key的随机分布(RP)和顺序分布(OPP)
  13. LabView实验——温度检测系统(实验学习版)
  14. python 横向拼接_python实现横向拼接图片
  15. COSClient上传图片失败
  16. mac brew 启动服务时报错“Bootstrap failed: 5: Input/output error”
  17. 机器学习之信用卡欺诈检测
  18. 陶哲轩实分析定理 11.4.3 $\max$与$\min$保持黎曼可积性
  19. 用Python搞定豆瓣上征婚交友的小姐姐们~
  20. python中axis的理解

热门文章

  1. Java程序设计基础陈国军版第五版第三章习题答案与解析
  2. 《计算机组成原理》(微课版) 第1章 计算机系统概述
  3. JavaWeb在线聊天系统开发
  4. lopatkin俄大神精简中文系统Windows 10 Enterprise 2016 LTSB 14393.577 x86-x64 ZH-CN PIP
  5. 网站开发之HTML基础表格Table和表单Form(三)
  6. 大咖说:如何借助腾讯云简单、高效移动开发
  7. docker安装oracle11g最全步骤
  8. python目标函数_python遗传算法目标函数怎么编
  9. 大地高、正高和正常高及高程异常
  10. 推荐!12个经典开源人脸识别数据库