np.isin()について

概要

np.where()を使って特定の条件を満たす項目を抜き出す処理は良く行う。 今回はその発展として、複数の値に一致する項目を抜き出してきたいという状況を考える。 そのような状況では、np.isin()を使えばよいという話。

詳細

具体的には以下のようなフルーツ( fruits )と食べたいものリスト( i_want_to_eat )があるとして、自分の食べたいものに該当するインデックスを知りたいとする。

>>> fruits = ['apple', 'ringo', 'banana', 'mikan']
>>> i_want_to_eat = ['ringo', 'mikan']

np.isin()を使うと以下のようにfruitに入っている複数のフルーツの内i_want_to_eatに入っているフルーツに該当する部分がTrue、それ以外にFalseが入った配列が返ってくる。

>>> fruits = np.array(fruits)
>>> i_want_to_eat = ['ringo', 'mikan']
>>> np.isin(fruits, i_want_to_eat)
array([False,  True, False,  True])

もし配列からそのフルーツのみ抜き出したければ、普通にnumpyのブールインデックス参照を行えばよい

>>> fruits[np.isin(fruits, i_want_to_eat)]
array(['ringo', 'mikan'], dtype='<U6')

以上。 普通にマニュアルに書いてあるけど、ちょっと調べてなかなかたどり着けなかったので、メモ代わりに書いた。