Python加速循环的若干个办法:

(1)使用Python封装的函数,而不是自编函数;

(2)使用Numpy函数,因为Numpy底层代码语言是C++;(np.where)

上面两个效果仍不好,尝试下面方法中的一种或多种:

(3)将需要处理的图像分为若干个部分,使用multiprocessing多进程并行化,充分利用CPU;

(4)采用numba(@njit)加速循环部分(但是与multiprocessing似乎不兼容);

(5)采用Cython,修改少量代码,对循环部分自动转为C++语言运行(但效果与代码中使用的函数Cython是否支持、是否满足Cython的代码标准有关);

(6)采用Pybind11,对循环部分使用C++手动重新编写,代码量大,学习成本较高,但是效果可观。

pybind11—python numpy与C++数据传递 - 简书 (jianshu)

pybind11库(用于在python中调用C++)的安装与配置使用(windows/linux系统)_BabyQ..的博客-CSDN博客_pybind11安装

pybind11 数据交互_bea_tree的博客-CSDN博客_pybind11 vector

在(6)中使用到的一些方法:

①NumCpp是C++中NumPy的替代,大部分NumPy方法都能支持,如bincount()、argmax()、sort()等。

②类python的enumerate函数的C++实现:C++ range/enumerate/zip 实现(pythonic) - 知乎 代码中采用了最快的for(auto && val:v){}的方法,方便易理解。

③list、二维vector的创建、初始化、赋值等。代码中使用了C++11的一些特性,为了开发者得到更趋于Python的易用性的感受,属于高级编程。

④CMake编译工具,CMake教程(一) - 知乎 。

更多推荐

Python加速循环的若干个办法