计算列表python列表中所有元素之间的欧式距离

问题描述 投票:0回答:2

我有一个清单清单。我想找到所有对和自身之间的欧几里得距离,并创建一个2D numpy数组。彼此之间的距离将在位置中为0,而对之间的距离将为零。清单清单范例:[[0, 42908],[1, 3],[1, 69],[1, 11],[0, 1379963888],[0, 1309937401],[0, 1],[0, 3],[0, 3],[0, 77]]我想要的结果是

  0 1 2 3 4 5 6 7 8
0 0 x x x x x x x x
1   0 x x x x x x x
2     0 x x x x x x 
3       0 x x x x x
4 .................
5 .................
6 .................
7 .................
8 .................

x代表差异值。周期表示结果应如矩阵中所示。我需要有关python中代码的帮助。行和列中的0,1,2等数字定义内部列表索引。

python euclidean-distance
2个回答
0
投票

您可以直接使用numpy来计算距离:

pts = [[0, 42908],[1, 3],[1, 69],[1, 11],[0, 1379963888],[0, 1309937401],[0, 1],[0, 3],[0, 3],[0, 77]]
x = np.array([pt[0] for pt in pts])
y = np.array([pt[1] for pt in pts])
np.sqrt(np.square(x - x.reshape(-1,1)) + np.square(y - y.reshape(-1,1)))

0
投票

您可以使用scipy.spatial.distance.pdist。由于组合的一半是多余的,它将返回一个压缩数组。但是您可以使用scipy.spatial.distance.pdist创建全方阵。

© www.soinside.com 2019 - 2024. All rights reserved.