Вам не нужен цикл вообще.Сначала обратите внимание, что вы можете найти ближайшее значение в vq
, сравнивая со значениями в vd
.Например, образец будет ближайшим к -0.5
, если он находится между -1
и 0
.Когда vq
и vd
отсортированы, вы можете использовать метко названный метод searchsorted
для поиска индексов в vd
, где сэмплы подходят. Эти индексы, примененные к vq
, ссылаются на соответствующие ближайшие значения:
>>> import numpy as np
>>>
>>> vq = np.array([-1.5,-0.5,0.5,1.5])
>>> vd = np.array([-1,0,1,2])
>>> samples = [0.1,-0.3]
>>>
>>> vq[vd[:-1].searchsorted(samples)]
array([ 0.5, -0.5])
Техническое примечание: перед применением сортированного поиска полезно удалить последний элемент из vd
, поскольку он не находится между значениями vq
.Без этой меры предосторожности образец> 2 дал бы индекс за пределами допустимого.