我有以下问题。
给定一个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()
有没有更快的方法可以做到这一点?这就是启发式方法中的目标函数,它被计算了数千次。