2016-09-12 7 views
4

numpy配列で "in"演算を実行するにはどうすればよいですか? (要素が指定されたnumpy配列に存在する場合はTrueを返します)numpy配列の "in"演算子ですか?

文字列、リスト、および辞書の場合、機能はわかりやすいです。

ここで私はnumpyの配列

a 
array([[[2, 3, 0], 
    [1, 0, 1]], 

    [[3, 2, 0], 
    [0, 1, 1]], 

    [[2, 2, 0], 
    [1, 1, 1]], 

    [[1, 3, 0], 
    [2, 0, 1]], 

    [[3, 1, 0], 
    [0, 2, 1]]]) 

b = [[3, 2, 0], 
    [0, 1, 1]] 

b in a 
True 
#Aligned with the expectation 

c = [[300, 200, 0], 
    [0, 100, 100]] 

c in a 
True 
#Not quite what I expected 
+0

、しかしそれを2次元配列の行に適用するにはいくつかのトリックが必要です。関係するものを見るにはコードを見てください。 – hpaulj

答えて

4

にあなたが最後の二つの軸に各位置でa内のすべての要素を越えbroadcasted比較を実行するであろう、equalityのための入力配列を比較することができることを適用したときに、私が得たものです第2のアレイ内の対応する位置にある要素に対して行われる。これはそうのように、我々は最後の二つの軸間ALL一致を確認し、最終的にANY試合をチェックした試合のブール配列、になります -

((a==b).all(axis=(1,2))).any() 

をサンプル実行

1)入力を:

In [68]: a 
Out[68]: 
array([[[2, 3, 0], 
     [1, 0, 1]], 

     [[3, 2, 0], 
     [0, 1, 1]], 

     [[2, 2, 0], 
     [1, 1, 1]], 

     [[1, 3, 0], 
     [2, 0, 1]], 

     [[3, 1, 0], 
     [0, 2, 1]]]) 

In [69]: b 
Out[69]: 
array([[3, 2, 0], 
     [0, 1, 1]]) 

2)ブロードキャストさ要素単位の比較:

In [70]: a==b 
Out[70]: 
array([[[False, False, True], 
     [False, False, True]], 

     [[ True, True, True], 
     [ True, True, True]], 

     [[False, True, True], 
     [False, True, True]], 

     [[False, False, True], 
     [False, False, True]], 

     [[ True, False, True], 
     [ True, False, True]]], dtype=bool) 

3)ALL最後の二軸間で一致し、最終的にANYマッチ:

In [71]: (a==b).all(axis=(1,2)) 
Out[71]: array([False, True, False, False, False], dtype=bool) 

In [72]: ((a==b).all(axis=(1,2))).any() 
Out[72]: True 

caにするための同様の手順に従う - `np.in1d`ある1Dアレイについて

In [73]: c 
Out[73]: 
array([[300, 200, 0], 
     [ 0, 100, 100]]) 

In [74]: ((a==c).all(axis=(1,2))).any() 
Out[74]: False 
+0

今日を保存していただきありがとうございます!だからnumpy配列上の存在をチェックするために "in"のような簡単な方法はありませんか? – akilat90

+0

@ akilat90恐れ入りますがありません。それとも、それを関数にラップしてそこに行くと、カスタムは「簡単な」方法で作られました! – Divakar