Numpy在2d数组行中找到1d数组元素

时间:2017-05-25 01:42:07

标签: python 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]])

b的第0行和第2行与a的相应元素没有匹配,但第1行在第2位匹配。预期输出:

array([nan, 2, nan])

如果给定行中有多个匹配项,则应使用第一个匹配项的位置。

我可以使用普通的python循环来研究解决方案,但我对这种矢量化方法感兴趣。

1 个答案:

答案 0 :(得分:2)

比较b和元素,然后找到每一行的第一个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])