Нахождение расстояния между элементами двух разных списков - PullRequest
0 голосов
/ 04 сентября 2018

Код ниже находит евклидово расстояние между каждым элементом списка a и каждым элементом списка b.

from scipy.spatial import distance
a = [[1, 2, 3], [4, 5, 6]]
b = [[10, 20]]

Final_distance = []
for i in [j for sub in a for j in sub]:
    for k in [m for t in b for m in t]:
        dist = distance.euclidean(i, k)
        Final_distance.append(dist)
print(Final_distance)

Выход

[9.0, 19.0, 8.0, 18.0, 7.0, 17.0, 6.0, 16.0, 5.0, 15.0, 4.0, 14.0]

Но для очень большого списка это занимает очень много времени. Есть ли способ уменьшить временную сложность вышеуказанного кода?

1 Ответ

0 голосов
/ 04 сентября 2018

Поскольку ваши евклидовы расстояния находятся в скалярах, это эквивалентно абсолютному значению между каждой точкой. Таким образом, вы можете повторять свои массивы в соответствующем порядке, используя np.repeat и np.tile, и просто вычитать свои массивы друг от друга:

import numpy as np

a = [[1, 2, 3], [4, 5, 6]]
b = [[10, 20]]

a1 = np.array(a).flatten()
b1 = np.array(b).flatten()

Final_distance = np.abs(np.subtract(np.repeat(a1, len(b1)), np.tile(b1, len(a1))))

Что возвращает:

array([ 9, 19,  8, 18,  7, 17,  6, 16,  5, 15,  4, 14])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...