回答編集履歴
1
追記
answer
CHANGED
@@ -31,4 +31,34 @@
|
|
31
31
|
[101.44424 , 137.79492 , 165.17267 , 201.09848 ],
|
32
32
|
[ 92.46553 , 210.28862 , 167.8457 , 296.00696 ]])
|
33
33
|
"""
|
34
|
+
```
|
35
|
+
|
36
|
+
### 参考(pandasを使わない方法)
|
37
|
+
pandasに頼りたくない場合、pandasのgroupby相当のものがnumpyにも標準にもないので少し手間取ります。`defaultdict(list)`などを使うと比較的楽で、速度などの懸念もないかと思います。
|
38
|
+
|
39
|
+
```python
|
40
|
+
import numpy as np
|
41
|
+
from operator import itemgetter
|
42
|
+
from collections import defaultdict
|
43
|
+
|
44
|
+
out_classes = np.array([0, 0, 3, 3, 5])
|
45
|
+
out_scores = np.array([0.99801666, 0.7711145, 0.9962558, 0.96635705, 0.80220133])
|
46
|
+
out_boxes = np.array(
|
47
|
+
[[ 8.540416, 61.232857, 76.36931, 123.20946 ],
|
48
|
+
[ 10.599434, 67.45303, 75.46433, 115.5706 ],
|
49
|
+
[101.44424, 137.79492, 165.17267, 201.09848 ],
|
50
|
+
[ 90.32121, 60.167862, 160.19128, 126.34792 ],
|
51
|
+
[ 92.46553, 210.28862, 167.8457, 296.00696 ]])
|
52
|
+
|
53
|
+
d = defaultdict(list)
|
54
|
+
for i, c in enumerate(out_classes):
|
55
|
+
d[c].append((i, out_scores[i]))
|
56
|
+
|
57
|
+
idx = [max(x, key=itemgetter(1))[0] for c, x in d.items()]
|
58
|
+
|
59
|
+
# 例示用
|
60
|
+
print(d) # defaultdict(<class 'list'>, {0: [(0, 0.99801666), (1, 0.7711145)], 3: [(2, 0.9962558), (3, 0.96635705)], 5: [(4, 0.80220133)]})
|
61
|
+
print(idx) # [0, 2, 4]
|
62
|
+
|
63
|
+
# 以下はidxを用いて取り出すだけで、pandasを用いたコードと同じ
|
34
64
|
```
|