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

回答編集履歴

1

追記

2019/12/24 18:57

投稿

hayataka2049
hayataka2049

スコア30939

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
  ```