2012-03-05 72 views
14

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

在代码中,我想用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] 

有没有快速的方法?

感谢

+0

'ys'会很长吗? – kennytm 2012-03-05 12:27:19

回答

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

如果您不需要跟踪哪些元素在哪里找到,哪些不在哪里就可以过滤输出以摆脱超出限制的所有索引:ndx = [e for n in.infortedsorted(xs,ys)如果e Picarus 2014-03-27 14:17:11