Оптимизация двух циклов for - PullRequest
1 голос
/ 29 февраля 2020

Я пытаюсь оптимизировать следующий код:

error1 = 0
    for point1 in p1:
        min_dist = 1000000000
        for point2 in p2:
            min_dist = min(min_dist, l2(point1, point2))
        error1 += min_dist

Хотя p1, p2 - это массивы 2D точек ([x, y])

l2 is: np.linalg .norm (np.array (p1) - np.array (p2))

1 Ответ

0 голосов
/ 29 февраля 2020

Предположим, что у p1 есть N очков, у p2 есть M очков.

import numpy as np

pt1 = np.array(p1)  # NxD, here D=2
pt2 = np.array(p2)  # MxD
d = pt1[:, None, :] - pt2[None, :, :]  # pairwise subtraction, NxMxD
d = np.sum(d**2, axis=2).min(axis=1)  # min square distance, N
error1 = np.sqrt(d).sum()  # output, scalar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...