簡體   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