我有下面的 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)
结果看起来是正确的,但它看起来不像是使用了欧几里得距离。
如何切换计算距离的方式(即如何在曼哈顿距离、马哈拉诺比斯距离或欧几里得距离等之间进行选择)?
1条答案
按热度按时间az31mfrm1#
实际上,在scipy中,默认情况下是欧氏距离。但是,如果你想要更大的灵活性,为什么不使用sklearn距离矩阵呢?
它具有许多其他距离,您也可以使用自己的距离函数
函数如下所示:
请参阅param度量:
计算功能数组中示例之间的距离时使用的度量。如果度量是字符串,则它必须是scipy.spatial.distance.pdist允许的度量参数选项之一,或者是pairwise.PAIRWISE_DISTANCE_FUNCTIONS中列出的度量。如果度量是“预先计算的,”则假定X是距离矩阵。或者,如果度量是可调用函数,在每一对示例(行)上调用它并记录结果值。2该可调用函数应该接受X中的两个数组作为输入,并返回一个表示它们之间距离的值。
可用的距离度量包括:
如果您坚持使用scipy,那么对于曼哈顿,您需要添加
p
参数对于欧氏距离p=2,这是默认的。