繁体   English   中英

如何加快Python中类似函数的卷积?

[英]How to speed up convolution like function in Python?

我从这里开始使用卷积代码,但不是让卷积的结果为k = (roi * K).sum()而是希望能够更改应用于(roi * K)的运算。 例如: np.std(roi * K)min(roi * K)

不幸的是,此代码并未针对快速运行进行优化,我希望它能更快地运行。

我试图找到一个已经实现的方法,但是没有找到任何方法。 如果那里有这样的东西并且执行迅速,那将是很好的。 如果不是,那么优化此代码的最佳策略是什么?

稍微调整代码以打印执行时间,结果如下:

[INFO] applying small_blur kernel
Convolve Time: 2.21276
OpenCV Time: 0.00088
Ratio Convolve/OpenCV: 2519.95248
[INFO] applying large_blur kernel
Convolve Time: 2.50598
OpenCV Time: 0.00611
Ratio Convolve/OpenCV: 410.16292
[INFO] applying sharpen kernel
Convolve Time: 2.10106
OpenCV Time: 0.00027
Ratio Convolve/OpenCV: 7750.65084
[INFO] applying laplacian kernel
Convolve Time: 2.10883
OpenCV Time: 0.00019
Ratio Convolve/OpenCV: 11111.88317
[INFO] applying sobel_x kernel
Convolve Time: 2.16267
OpenCV Time: 0.00021
Ratio Convolve/OpenCV: 10474.46882
[INFO] applying sobel_y kernel
Convolve Time: 2.09571
OpenCV Time: 0.00022
Ratio Convolve/OpenCV: 9513.05519
[INFO] applying emboss kernel
Convolve Time: 2.10961
OpenCV Time: 0.00026
Ratio Convolve/OpenCV: 8125.21671

您可以尝试看看numba

Numba使用行业标准的LLVM编译器库在运行时将Python函数转换为优化的机器代码。 Python中Numba编译的数值算法可以达到C或FORTRAN的速度。

如果您的代码是数字定向的(做大量的数学运算),使用NumPy的次数很多和/或有很多循环,那么Numba通常是一个不错的选择。 在这些示例中,我们将应用Numba的JIT装饰器中最基本的@jit来尝试加速某些功能,以演示什么有效,哪些无效。

您可以通过安装

$ pip install numba

用法就像在函数顶部调用@jit装饰器一样简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM