Самый эффективный способ найти индекс минимальной разницы для каждого элемента двух массивов

У меня есть два списка трехмерных точек; a, содержащий 14894 точек, и b, содержащий 1612 точек.

Для каждой точки a мне нужно найти индекс ближайшей точки b в плоскости XZ за минимально возможное время. Это нужно сделать Только с модулями ядра Python.

import time
from random import random

output = []

aL = 14894
aX = [round(random()*100, 2) for _ in range(aL)]
aZ = [round(random()*100, 2) for _ in range(aL)]

bL = 1612
bX = [round(random()*100, 2) for _ in range(aL)]
bZ = [round(random()*100, 2) for _ in range(aL)]


t0 = time.time()

for a in range(len(aX)):

    temp_diff = None
    temp_ind = None

    for b in range(len(bX)):

        diff = (aX[a] - bX[b]) ** 2 + (aZ[a] - bZ[b]) ** 2

        if not temp_diff or diff < temp_diff:
            temp_diff = diff
            temp_ind = b

    output.append(temp_ind)  

print("Elapsed time:", time.time() - t0)


>>> Elapsed time: 58.512130737304687

Расстояние между точкой a и точкой b должно быть math.sqrt((aX[a] - bX[b]) ** 2 + (aZ[a] - bZ[b]) ** 2), поэтому вам следует стремиться минимизировать (aX[a] - bX[b]) ** 2 + (aZ[a] - bZ[b]) ** 2, а не abs(aX[a] - bX[b]) + abs(aZ[a] - bZ[b]).

blhsing 31.10.2018 12:59

Спасибо, что указали на это, хотя ваши расчеты более точны, они увеличивают время: >>> Elapsed time: 67.977828979492187

Charles.fried 31.10.2018 13:04

Эффективность мало что значит, если результат неправильный. :-)

blhsing 31.10.2018 13:05

Ах ты прав, я поправил!

Charles.fried 31.10.2018 13:06
0
4
32
0

Другие вопросы по теме