teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

2020/05/27 06:14

投稿

tiitoi
tiitoi

スコア21960

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

2020/05/27 06:14

投稿

tiitoi
tiitoi

スコア21960

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)