10

例:私は持っていa = np.array([123, 412, 444]) ますb = np.array([123, 321])

のすべての要素がa含まれているかどうかを知りたいです。これには簡単な操作はありますか?この場合、それは正しくありません。b

4

4 に答える 4

14

いつでもセットを使用できます:

>>> 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 配列ではループが遅くなるため、避ける必要があります。

于 2012-05-12T16:56:13.887 に答える
10

集合差を使用して、探しているものを判断できます。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 より大きくなったため、 に存在しない要素がありました。abba

于 2012-05-12T16:50:03.493 に答える
4

つまり、b の各要素が a に含まれているかどうかを確認する必要があります。 in1dそれをします:

from numpy import array, in1d
a = array([123, 412, 444])
b = array([123, 321])
print in1d(b, a).all()

2021年からの更新:最近np.isinはおすすめ

于 2012-05-12T16:54:43.443 に答える
-1

あなたができる:

 a = an_array
 b = another_array
 for i in b:
    if i not in a:
        return False
return True
于 2012-05-12T16:50:52.713 に答える