在Numpy数组中查找多个值

16
我正在寻找一个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个回答

22

对于大数组 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
如果您不需要跟踪找到哪些元素和哪些元素未被找到,您可以过滤输出以摆脱所有超出限制的索引:ndx = [ e for e in np.searchsorted(xs,ys) if e<len(xs) ] - Picarus

4
在这种情况下,只需使用 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])

这个问题没有回答问题。它最终打印了ys的值。变量xy未定义,应该是ys - Yano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接