例:私は持っていa = np.array([123, 412, 444])
ますb = np.array([123, 321])
のすべての要素がa
含まれているかどうかを知りたいです。これには簡単な操作はありますか?この場合、それは正しくありません。b
いつでもセットを使用できます:
>>> a = numpy.array([123, 412, 444])
>>> b = numpy.array([123, 321])
>>> set(b) in set(a)
False
または、numpy の新しいバージョンの場合:
>>> numpy.in1d(b,a)
array([ True, False], dtype=bool)
配列ではなく「答え」だけが必要な場合:
>>> numpy.in1d(b,a).all()
False
または(最も望ましくない):
>>> numpy.array([x in a for x in b])
array([ True, False], dtype=bool)
numpy 配列ではループが遅くなるため、避ける必要があります。
集合差を使用して、探しているものを判断できます。Numpy にはnumpy.setdiff1d(ar1, ar2)という組み込み関数があります。
ar2 にない、ar1 のソートされた一意の値を返します。
あなたのケースの例:
>>> a = np.array([123, 412, 444])
>>> b = np.array([123, 321])
>>> diff = np.setdiff1d(b, a)
>>> print diff
array([321])
>>> if diff.size:
>>> print "Not passed"
したがって、あなたの場合、bからaを減算し、aにないbの要素を持つ配列を取得する集合差を実行します。次に、それが空かどうかを確認できます。ご覧のとおり、出力は です。これは、 には存在するが には存在しない312
エントリです。の長さが 0 より大きくなったため、 に存在しない要素がありました。a
b
b
a
あなたができる:
a = an_array
b = another_array
for i in b:
if i not in a:
return False
return True