例えば、こんな感じになってた時、
import numpy as np
a = np.array([1,2,4,2,5])
b = np.array([2,2,4,5])
c = np.array([1,3])
b
がa
に含まれてるか、c
がa
に含まれてるか、判定したいときのやり方です
1. np.isin
を使う
np.isin(arr1, arr2)
とすると、arr1
の各要素がarr2
に含まれているかのTrue/Falseのnp.arrayが帰ってきます
これを使って、
sum(np.isin(b, a)) == len(b) # returns True
sum(np.isin(c, a)) == len(c) # returns False
のように判定することができます。
np.isin
をnp.in1d
に変更しても全く同じ結果になります。
2. np.intersect1d
を使う
np.intersect1d(arr1, arr2)
で、arr1
とarr2
の共通部分を返してくれます。
デフォルトでは同じ要素は一つのみ返ってくるので、np.intersect1d(a, b)
はarray([2, 4, 5])
を返すことになります。
それゆえ、以下のようにして比較できます
len(np.intersect1d(a, b)) == len(np.unique(b)) # returns True
len(np.intersect1d(a, c)) == len(np.unique(c)) # returns False
3. 単純にset
にして包含関係を見る
うだうだnumpyでやってきましたが、単純にこれでいいですよね
set(b) <= set(a) # returns True
set(c) <= set(a) # returns False
他に良いやり方があったら教えてください