2017-05-25 119 views
1

我想在2d數組的行中查找1d數組的元素。numpy查找2d數組行中的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和一個明智的元素,然後找到每行的第一個True值索引,或者設置爲nan,如果全部爲False。

np.where(np.sum(b==a[:,None],1) > 0, np.argmax(b==a[:,None],1), np.nan) 
Out[22]: array([ nan, 2., nan])