我正在寻找一个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]
有没有快速的方法?
谢谢
对于大阵列xs和ys,你将需要改变的基本方法这成为快。如果您可以进行排序xs,那么可以使用一个简单的方法numpy.searchsorted():
xs
ys
numpy.searchsorted()
xs.sort() ndx = numpy.searchsorted(xs, ys)
如果保持的原始顺序很重要xs,您也可以使用这种方法,但是您需要记住原始索引:
orig_indices = xs.argsort() ndx = orig_indices[numpy.searchsorted(xs[orig_indices], ys)]