回答編集履歴
2
え
answer
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
img[(100 <= b) & (b < 200), 2] = g[(100 <= b) & (b < 200)]
|
22
22
|
```
|
23
23
|
|
24
|
-
ループを消すことで300倍程度高速化できました。
|
24
|
+
ループを消すことで300倍程度高速化できました。(ループバージョンと値が一致することは numpy.array_equal() で確認)
|
25
25
|
|
26
26
|
```
|
27
27
|
58.8 ms ± 103 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
|
1
d
answer
CHANGED
@@ -15,7 +15,8 @@
|
|
15
15
|
↓
|
16
16
|
|
17
17
|
```python
|
18
|
-
b, g, r = cv2.split(img)
|
18
|
+
b, g, r = cv2.split(img) # チャンネルごとに分割
|
19
|
+
|
19
20
|
img[(0 <= b) & (b < 100), 2] = b[(0 <= b) & (b < 100)]
|
20
21
|
img[(100 <= b) & (b < 200), 2] = g[(100 <= b) & (b < 200)]
|
21
22
|
```
|
@@ -25,4 +26,12 @@
|
|
25
26
|
```
|
26
27
|
58.8 ms ± 103 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
|
27
28
|
181 µs ± 140 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
|
28
|
-
```
|
29
|
+
```
|
30
|
+
|
31
|
+
今回のようなケースでは以下を検討するといいと思います。
|
32
|
+
|
33
|
+
1. numpy の機能を使えないか検討する
|
34
|
+
2. numpy で書くことができなくて、ループが発生してしまうのであれば numba で高速化する
|
35
|
+
|
36
|
+
[NumPy配列のブールインデックス参照 | hydroculのメモ](https://hydrocul.github.io/wiki/numpy/ndarray-ref-boolean.html)
|
37
|
+
[Pythonで高速化処理!numbaとCythonの実行速度を比較してみた。 - Np-Urのデータ分析教室](https://www.randpy.tokyo/entry/numba_cython)
|