我有一个清单清单。我想找到所有对和自身之间的欧几里得距离,并创建一个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等数字定义内部列表索引。
您可以直接使用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)))
您可以使用scipy.spatial.distance.pdist
。由于组合的一半是多余的,它将返回一个压缩数组。但是您可以使用scipy.spatial.distance.pdist
创建全方阵。