回答編集履歴
2
タイポ修正
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
置き換えの処理の部分を高速化したいとのことなので、その部分だけ対象として、次のような実装が考えられます。
|
2
|
-
(`cv2.imread(file_path`) の部分は除いています。)
|
2
|
+
(`cv2.imread(file_path)`) の部分は除いています。)
|
3
3
|
|
4
4
|
①for-loop と if 文を除く:
|
5
5
|
```Python
|
1
import 文の追加
answer
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
置き換えの処理の部分を高速化したいとのことなので、その部分だけ対象として、次のような実装が考えられます。
|
2
|
-
(cv2.imread の部分は除いています。)
|
2
|
+
(`cv2.imread(file_path`) の部分は除いています。)
|
3
3
|
|
4
4
|
①for-loop と if 文を除く:
|
5
|
-
```
|
5
|
+
```Python
|
6
6
|
import cv2, math
|
7
7
|
import scipy.stats as sstats
|
8
8
|
|
9
|
+
|
9
10
|
def func1(bgr):
|
10
11
|
"""for-loop と if 文を除く
|
11
12
|
"""
|
@@ -18,7 +19,13 @@
|
|
18
19
|
```
|
19
20
|
|
20
21
|
②numba.jit を使用する:
|
21
|
-
```
|
22
|
+
```Python
|
23
|
+
import cv2
|
24
|
+
import scipy.stats as sstats
|
25
|
+
import numpy
|
26
|
+
import numba
|
27
|
+
|
28
|
+
|
22
29
|
@numba.jit("void(u1[:,:,:], i4[:,:], i4[:,:], i4[:,:], i4, i4, i4)")
|
23
30
|
def func2_numba(bgr, b, g, r, mode_b, mode_g, mode_r):
|
24
31
|
"""numba.jit を適用する処理
|
@@ -39,8 +46,14 @@
|
|
39
46
|
func2_numba(bgr, b, g, r, mode_b, mode_g, mode_r)
|
40
47
|
return bgr
|
41
48
|
```
|
49
|
+
|
42
50
|
オリジナルの実装を `func0` としておきます(実装は次の通り):
|
43
|
-
```
|
51
|
+
```Python
|
52
|
+
import cv2
|
53
|
+
import scipy.stats as sstats
|
54
|
+
import numpy
|
55
|
+
|
56
|
+
|
44
57
|
def func0(bgr):
|
45
58
|
"""オリジナルの実装
|
46
59
|
"""
|
@@ -66,7 +79,7 @@
|
|
66
79
|
処理速度は ② > ① >> original となりました。
|
67
80
|
※関数のコンパイル時間は除いています。
|
68
81
|
|
69
|
-
```
|
82
|
+
```Python
|
70
83
|
%timeit func0(bgr) # 1.84 s ± 46 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
|
71
84
|
%timeit func1(bgr) # 34.6 ms ± 1.16 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
|
72
85
|
%timeit func2(bgr) # 30.8 ms ± 158 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
|