矢量与numpy.where循环

时间:2017-05-26 09:31:17

标签: python performance numpy vectorization

>>> a = np.array([1, 1, 2, 3, 3, 4, 5])
>>> b = np.array([1, 3, 4, 5])
>>> indices = np.zeros((len(a)))
>>> for i in range(len(a)):
    try:
        indices[i] = np.where(b == a[i])[0][0]
    except:
        indices[i] = -1

>>> indices
array([ 0.,  0., -1.,  1.,  1.,  2.,  3.])

对于np.array的每个元素,如何在另一个np.array中获取其索引,并将常量值(此处为-1)放在未找到该元素的位置后者?

2 个答案:

答案 0 :(得分:3)

使用np.searchsorted获取索引,然后通过将索引的索引与a进行比较,然后将其设置为-1 -

,重新使用这些索引来获取索引
idx = np.searchsorted(b,a)
idx[b[idx] != a] =-1

答案 1 :(得分:2)

您可以使用np.searchsorted()np.in1d()

indices = np.searchsorted(b, a)
indices[~np.in1d(a, b)] = -1
print(indices)  # array([ 0,  0, -1,  1,  1,  2,  3])