在Numpy数组中查找多个值

时间:2012-03-05 12:24:28

标签: python numpy

我正在寻找一个numpy函数来查找在向量(xs)中找到某些值的索引。值以另一个数组(ys)给出。返回的索引必须遵循ys的顺序。

在代码中,我想用numpy函数替换下面的列表推导。

>> import numpy as np
>> xs = np.asarray([45, 67, 32, 52, 94, 64, 21])
>> ys = np.asarray([67, 94])
>> ndx = np.asarray([np.nonzero(xs == y)[0][0] for y in ys]) # <---- This line
>> print(ndx)
[1 4]

有快节奏吗?

由于

2 个答案:

答案 0 :(得分:21)

对于大型数组xsys,您需要更改基本方法以使其变得更快。如果你对xs进行排序很好,那么一个简单的选择是使用numpy.searchsorted()

xs.sort()
ndx = numpy.searchsorted(xs, ys)

如果保持xs的原始顺序很重要,您也可以使用此方法,但您需要记住原始索引:

orig_indices = xs.argsort()
ndx = orig_indices[numpy.searchsorted(xs[orig_indices], ys)]

答案 1 :(得分:1)

在这种情况下,只需使用np.isin()函数来掩盖那些符合您条件的元素,就像这样:

xs = np.asarray([45, 67, 32, 52, 94, 64, 21])
ys = np.asarray([67, 94])

mask=xs[np.isin(xs,xy)]
print(xs[mask])