私は2つの配列を持っています
a = array([1,2,3])
b = array([2,7])
ここで、a の要素が b にあり、返される答えが (False、True、False) であるかどうかを確認したいと思います。関数を使わずにこれを行う簡単な方法はありますか?
これはどう:
>>> numpy.setmember1d(a, b)
array([False, True, False], dtype=bool)
更新、ありがとうセバーグ。numpy の新しいバージョンでは、次のようになります。
>>> numpy.in1d(a, b)
array([False, True, False], dtype=bool)
標準の python リストの場合:
>>> a = [1, 2, 3]
>>> b = [2, 7]
>>> tuple(x in b for x in a)
(False, True, False)
関数が反復と演算子array
の両方をサポートするオブジェクトを返すと仮定すると、同じように機能するはずです。in
numpy のみを使用:
>>> (a[:,None] == b).any(axis=-1)
a
(したがって、 a(N,)
から配列に変換し、 (N,1)
numpy のブロードキャストを使用して等しいかどうかをテストします。最終的には配列になり (形状がある(N, M)
と仮定して...)、各行に a があるかどうかを.b
(M,)
True
any(axis=-1)
さて、これは私がリストでそれを行う方法です:
>>> a = [1, 2, 3]
>>> b = [2, 7]
>>> result = []
>>>
>>> for x in a:
... result.append(x in b)
...
>>> print result
[False, True, False]