You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何切换Scipy distance_matrix的距离计算方式(欧氏/曼哈顿等)?

切换Scipy distance_matrix的距离计算方式

首先明确:scipy.spatial.distance_matrix默认使用的就是欧氏距离,你觉得没用到可能是误解了。如果要切换其他距离类型,只需要给函数指定metric参数即可,不同距离的设置方式如下:

1. 显式指定欧氏距离

虽然是默认值,也可以显式声明,代码示例:

from scipy.spatial import distance_matrix
import pandas as pd

# 你的坐标DataFrame
df = pd.DataFrame({'x': [50,18,6,30,44,81], 'y': [50,83,21,13,29,68]})

# 显式使用欧氏距离生成距离矩阵
DistMatrix_euclidean = round(pd.DataFrame(
    distance_matrix(df.values, df.values, metric='euclidean'),
    index=df.index, columns=df.index
), 1)

2. 曼哈顿距离(城市街区距离)

使用metric='cityblock'参数切换:

# 曼哈顿距离计算
DistMatrix_manhattan = round(pd.DataFrame(
    distance_matrix(df.values, df.values, metric='cityblock'),
    index=df.index, columns=df.index
), 1)

3. 马氏距离

马氏距离需要额外传入协方差矩阵的逆矩阵,通过VI参数指定:

import numpy as np

# 计算数据集协方差矩阵的逆
cov_inv = np.linalg.inv(df.cov())

# 马氏距离计算
DistMatrix_mahalanobis = round(pd.DataFrame(
    distance_matrix(df.values, df.values, metric='mahalanobis', VI=cov_inv),
    index=df.index, columns=df.index
), 1)

其他常用距离选项

除上述类型外,还可指定以下距离:

  • 切比雪夫距离:metric='chebyshev'
  • 闵可夫斯基距离:metric='minkowski'(可通过p参数指定阶数,p=2等价于欧氏距离,p=1等价于曼哈顿距离)

内容的提问来源于stack exchange,提问作者Yannis_Tr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:00:48