2017-05-25 21 views
1

2次元配列の行に1次元配列の要素を見つけたい。Numpyは2次元配列行の1d配列要素を見つける

In [1]: import numpy as np 

In [2]: a = np.array([7,7,7]) 

In [3]: a 
Out[3]: array([7, 7, 7]) 

In [4]: b = np.arange(15).reshape(3,5) 

In [5]: b 
Out[5]: 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14]]) 

行0及びbの2 aの対応する要素に一致していないが、行1は、2位期待出力にマッチを有する。

array([nan, 2, nan]) 

特定の行に複数の一致がある場合は、最初の一致の位置を使用する必要があります。

通常のpythonループを使用して解決策を掘り下げることができますが、私はこれをベクトル化する方法に興味があります。

+0

複数の一致が連続している場合はどうなりますか?あなたは何を望みますか? – Psidom

+0

bの行1に7が複数出現すると、どのような出力が得られますか? – Spidey

+0

最初の一致を返すことができます。質問が更新されました。 –

答えて

2

bとa要素を賢明に比較し、各行の最初のTrue値インデックスを検索するか、すべてfalseの場合はnanに設定します。

np.where(np.sum(b==a[:,None],1) > 0, np.argmax(b==a[:,None],1), np.nan) 
Out[22]: array([ nan, 2., nan]) 
関連する問題