python - 使用 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()
有没有更快的方法来做到这一点?这是启发式算法中的目标函数,它被计算了数千次。
解决方案
推荐阅读
- android - Android 12 - 通知蹦床限制
- python - 如何在运行代码之前清除 Visual Studio Code 中的终端?
- java - 多个 XML 文档到一个 java 对象或 XML 文件到一个 java 对象
- python - 如何分离只需要运行一次即可在数据库服务上进行一些数据准备的 docker 应用程序的一部分?
- discord - 如何检查用户是否提到了某人或只是写了胡言乱语
- r - 如何将一组数字分配给变量,但该组数字将随机生成?
- php - 流明:缓存与数据库
- flutter - 无法使用 PdfDocument.openFile(path) 从本地存储打开 pdf - Flutter
- swift - 在导航堆栈 SwiftUI 中显示带有按钮的工作表
- numpy - 带有浮点错误的 Numpy setdiff1d