scipy 如何更改在科学距离矩阵中计算距离的方式?

vom3gejh  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(146)

我有下面的 Dataframe (df):

x   y
0  50  50
1  18  83
2   6  21
3  30  13
4  44  29
5  81  68

它对应于6个点的x和y坐标。我使用scipy的distance_matrix创建一个距离矩阵,并使用以下代码:

DistMatrix = round(pd.DataFrame(distance_matrix(df.values, df.values), index=df.index, columns=df.index), 1)

结果看起来是正确的,但它看起来不像是使用了欧几里得距离。
如何切换计算距离的方式(即如何在曼哈顿距离、马哈拉诺比斯距离或欧几里得距离等之间进行选择)?

az31mfrm

az31mfrm1#

实际上,在scipy中,默认情况下是欧氏距离。但是,如果你想要更大的灵活性,为什么不使用sklearn距离矩阵呢?
它具有许多其他距离,您也可以使用自己的距离函数
函数如下所示:

sklearn.metrics.pairwise_distances(X, Y=None, metric='euclidean', *, n_jobs=None, force_all_finite=True,**kwds)

请参阅param度量:

metric: str or callable, default=’euclidean’

计算功能数组中示例之间的距离时使用的度量。如果度量是字符串,则它必须是scipy.spatial.distance.pdist允许的度量参数选项之一,或者是pairwise.PAIRWISE_DISTANCE_FUNCTIONS中列出的度量。如果度量是“预先计算的,”则假定X是距离矩阵。或者,如果度量是可调用函数,在每一对示例(行)上调用它并记录结果值。2该可调用函数应该接受X中的两个数组作为输入,并返回一个表示它们之间距离的值。
可用的距离度量包括:

‘cosine’
‘euclidean’
‘haversine’
‘manhattan’
‘nan_euclidean’

如果您坚持使用scipy,那么对于曼哈顿,您需要添加p参数

distance_matrix(df.values, df.values, p=1)

对于欧氏距离p=2,这是默认的。

相关问题