如何排除 sklearn.metrics.pairwise.euclidean_distances 结果中的双精度值

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

我正在测量多个点之间的欧几里德距离,并将它们的坐标存储在数组中。

from sklearn.metrics.pairwise import euclidean_distances
points = [[1,2], [1,3], [4,5], [2,6]]

distances = euclidean_distances(points)
distances
array([[0.        , 1.        , 4.24264069, 4.12310563],
       [1.        , 0.        , 3.60555128, 3.16227766],
       [4.24264069, 3.60555128, 0.        , 2.23606798],
       [4.12310563, 3.16227766, 2.23606798, 0.        ]])

在返回的数组中,每个值都出现两次。有没有一种方法可以有效地返回只出现一次的值? 这将是我首选的结果:

[1.0, 4.242640687119285, 4.123105625617661, 3.605551275463989, 3.1622776601683795, 2.23606797749979]

我查看了 euclidean_distances 公式的文档,但似乎没有排除双精度值的参数。

我可以通过以下方式排除双精度值:

dist_list = []
for i in range(len(distances)):
    unique_dist = distances[i][i+1:]
    dist_list.extend(unique_dist)

但我想知道是否有更有效的方法。我不想使用 unique(),因为我的数据中可能存在双倍距离。

python list scikit-learn euclidean-distance
1个回答
0
投票

Numpy 对于提取矩阵上(或下)三角形部分的索引非常有用。我这里设置了

k=1
来排除对角线部分,如果你想包含它,使用
k=0

import numpy as np
from sklearn.metrics.pairwise import euclidean_distances
points = [[1,2], [1,3], [4,5], [2,6]]

distances = euclidean_distances(points)
print(distances[np.triu_indices_from(distances, k=1)])

array([1.        , 4.24264069, 4.12310563, 3.60555128, 3.16227766,
       2.23606798])
© www.soinside.com 2019 - 2024. All rights reserved.