Найдите индекс ближайшего соответствия одного столбца и верните значения другого столбца относительно тестового одномерного массива - PullRequest
0 голосов
/ 01 августа 2020

У меня два массива numpy Array1, Array2. Array1 имеет форму (27000,), а Array2 имеет форму (501,3). Оба массива содержат внутри себя значения np.float32 numeri c. Мне нужно сделать следующее:

  1. Во-первых, для каждого элемента в Array1 найти (индекс) ближайшего совпадающего элемента в первом столбце Array2.
  2. Затем извлеките значения для этих индексов "ближайшего соответствия" из второго (или третьего) столбца Array2. Здесь я хотел бы иметь выбор, хочу ли я иметь значения из второго или из третьего столбца.

Я ищу быстрое Numpy решение для этого (желательно однострочное), потому что эта операция появляется где-то внутри моего кода, и сейчас моя текущая реализация (где я разбиваю ее на две части, т.е. сначала получаю индексы, а затем выбираю соответствующие значения), похоже, это занимает некоторое время. Моя текущая реализация:

indices   =  abs(Array1[:, None] - Array2[:,0][None, :]).argmin(axis=-1)
final_val =  Array2[indices,2]

Можно было бы ожидать, что простая операция Numpy для этого должна быть достаточно быстрой, однако мне нужно запускать мою программу тысячи раз, поэтому любая экономия времени на этом ( наиболее трудоемкая часть) мне очень поможет.

Заранее благодарен за вашу помощь.

ИЗМЕНИТЬ ИСТОРИЮ:

  1. Сделал заголовок вопроса более кратким и ясным.

1 Ответ

0 голосов
/ 02 августа 2020

Думаю, я нашел здесь ответ:

NumPy: векторизация поиска ближайшего значения в массиве для каждого элемента в другом массиве

Короче говоря, используйте numpy.searchsorted() для лучшей производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...