首页 > 解决方案 > 使用 numpy/python 从点列表计算最小距离的更快方法

问题描述

我有以下问题。

给定一个 2*N 元素的数组,前半部分和后半部分是 x 和 y 坐标。

我想计算这些点之间的最小距离。

例如:

sol = [0.37454012, 0.95071431, 0.73199394, 0.59865848, 0.15601864,
       0.15599452, 0.05808361, 0.86617615, 0.60111501, 0.70807258]

相应的点是:

[(0.3745401188473625, 0.15599452033620265),
 (0.9507143064099162, 0.05808361216819946),
 (0.7319939418114051, 0.8661761457749352),
 (0.5986584841970366, 0.6011150117432088),
 (0.15601864044243652, 0.7080725777960455)]

最小距离等于0.29670818834575136

现在我用下面的代码解决:

import numpy as np
from scipy.spatial.distance import cdist
np.random.seed(42)
sol = np.random.rand(10)

x = sol[:len(sol)//2]
y = sol[len(sol)//2:]

points = list(zip(x,y))

m = cdist(points, points, 'euclidean')
m = m + np.where(np.eye(m.shape[0])>0,np.inf,0)

smallest = m.min()

有没有更快的方法来做到这一点?这是启发式算法中的目标函数,它被计算了数千次。

标签: pythonperformancenumpy

解决方案


推荐阅读