两个for循环的优化

时间:2020-02-29 16:31:09

标签: python numpy optimization

我正在尝试优化以下代码:

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是:np.linalg.norm(np.array(p1)-np.array(p2))

1 个答案:

答案 0 :(得分:0)

假设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