Векторизация поиска между двумя числами - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь найти способ векторизации следующего цикла for, используя numpy. Это для цикла делает мой код действительно перетащить. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно найти значение, находящееся в словаре d, на основе индекса, где значение val попадает в диапазон в массиве row.

for i in range(len(row)-1):
    if row[i]<val<=row[i+1]:
        return d[i]*row[-1]

Я бы предположил, что я мог бы использовать np.where и np.logical_and, чтобы получить между двумя числами в массиве, но тогда мне нужен индекс, чтобы получить значение из словаря, и это та часть, которую я просто могу ' Кажется, что выяснить без цикла.

1 Ответ

1 голос
/ 22 мая 2019

Благодаря комментарию Дивакара, я думаю, что правильный ответ состоит в том, чтобы заменить весь цикл for на это тупое чудовище:

 np.vectorize(d1.get)((np.searchsorted(row[:-1],vals,side='left'))-1)*row[-1]
...