У меня есть массив numpy, который имеет 10000 векторов с 3000 элементов в каждом. Я хочу вернуть 10 лучших индексов ближайших пар с расстоянием между ними. Так что, если строки 5 и ряд 7 имеют самое близкое эвклидовое расстояние 0,005, а ряд 8 и ряд 10 имеют второе ближайшее эвклидовое расстояние 0,0052, то я хочу вернуться [(8,10, .0052), (5,7. 005)]. Традиционный метод цикла очень медленный. Существует ли альтернативный более быстрый подход к способу получения евклидовых соседей векторов больших объектов (хранимых в виде массива np)?Самый быстрый способ получить самые близкие 10 эвклидовых соседей большого вектор-функции в python
Я делаю следующее:
l = []
for i in range(0,M.shape[0]):
for j in range(0,M.shape[0]):
if i != j and i > j:
l.append((i,j,euc(M[i],M[j]))
return l
Здесь EUC функция для вычисления евклидовы расстояния между двумя векторами матрицы с использованием SciPy. Затем я сортирую l и вытаскиваю верхние 10 ближайших расстояний
Вы видели [это] (http://stackoverflow.com/questions/22720864/efficiently-calculating-a-euclidean-distance-matrix-using-numpy) и [это] (http://stackoverflow.com/вопросы/22390418/попарные-смещение-векторы-среди-множество-пунктов)? –
Возможный дубликат [Как можно вычислить эвклидовое расстояние с помощью numpy?] (Http://stackoverflow.com/questions/1401712/how-can-the-euclidean-distance-be-calculated-with-numpy) – DyZ
Я знаю как рассчитать эвклидовое расстояние и уже сделали это, но я ищу самый быстрый способ конкурировать между каждой парой строк в массиве np, а затем сортировать его и возвращать верхние 10 –