はじめに
最近Pandasを勉強しています。factorizeというのを初めて知りました。
AutoGluonを使ったObject Detectionでは結果がPandas DataFrameで返ってきます。その時にfactorizeが非常に役に立ちます。
predict_class predict_score predict_rois 0 head 0.988660 {'xmin': 0.3798920810222626, 'ymin': 0.2936957... 1 head 0.981958 {'xmin': 0.16018624603748322, 'ymin': 0.251445... 2 head 0.964868 {'xmin': 0.7895624041557312, 'ymin': 0.1375325... 3 head 0.962894 {'xmin': 0.5869008302688599, 'ymin': 0.2351982... 4 head 0.299219 {'xmin': 0.5046889185905457, 'ymin': 0.4765846... .. ... ... ... 84 head 0.058102 {'xmin': 0.1765645295381546, 'ymin': 0.3947232... 85 head 0.057993 {'xmin': 0.8565279245376587, 'ymin': 0.1774100... 86 head 0.057855 {'xmin': 0.2825169563293457, 'ymin': 0.3654884... 87 head 0.057760 {'xmin': 0.2772541344165802, 'ymin': 0.5180094... 88 head 0.057700 {'xmin': 0.06226371228694916, 'ymin': 0.014346...
以前の方法
class_names = list(set(selected_result['predict_class'])) class_ids = np.array([class_names.index(i) for i in list(selected_result['predict_class'])])
新たに習得した方法
class_ids , class_names = selected_result['predict_class'].factorize()
これで以前の方法と同じ結果が得られます。返ってくるclass_namesがリストかnumpy arrayかの違いはありますが。