Python 马氏距离求取函数详解

 更新时间:2021年11月16日 15:24:55   作者:苏苏与阿言  
这篇文章主要为大家介绍了Python 马氏距离求取函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

马氏距离区别于欧式距离,如百度知道中所言:

马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示点与一个分布之间的距离。它是一种有效的计算两个未知样本集的相似度的方法。与 欧氏距离不同的是,它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的),并且是尺度无关的(scale-invariant),即独立于测量尺度。对于一个均值为μ, 协方差矩阵为Σ的多变量向量,其马氏距离为sqrt( (x-μ)'Σ^(-1)(x-μ) )。

因此,对于马氏距离最终的定义式为:

上代码,将马氏距离求取式,封装为Python函数,拷贝即可使用:

from numpy import *
import numpy
def get_mahalanobis(x, i, j):
    xT = x.T  # 求转置
    D = numpy.cov(xT)  # 求协方差矩阵
    invD = numpy.linalg.inv(D)  # 协方差逆矩阵
    assert 0 <= i < x.shape[0], "点 1 索引超出样本范围。"
    assert -1 <= j < x.shape[0], "点 2 索引超出样本范围。"
    x_A = x[i]
    x_B = x.mean(axis=0) if j == -1 else x[j]
    tp = x_A - x_B
    return numpy.sqrt(dot(dot(tp, invD), tp.T))

使用方式如下:

if __name__ == '__main__':
    # 初始化数据点集,或者从其它地方加载
    x = numpy.array([[3, 4], [5, 6], [2, 2], [8, 4]])
    # 求第0个点到均值之间的马氏距离(j为-1时代表均值)
    print(get_mahalanobis(x, 0, -1))
    # 求第0个点到第1个点之间的马氏距离
    print(get_mahalanobis(x, 0, 1))
    # 求第2个点到第3个点之间的马氏距离(索引从0开始算起)
    print(get_mahalanobis(x, 2, 3))

运行结果贴图

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • python实现磁盘日志清理的示例

    python实现磁盘日志清理的示例

    这篇文章主要介绍了python实现磁盘日志清理的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • python自带的http模块详解

    python自带的http模块详解

    本文主要是给大家详细讲解了Python中自带的http模块的使用方法和实例,非常的细致,有需要的小伙伴可以参考下
    2016-11-11
  • 多线程爬虫批量下载pcgame图片url 保存为xml的实现代码

    多线程爬虫批量下载pcgame图片url 保存为xml的实现代码

    用Python写的多线程爬虫批量下载pcgame的图片url并保存为xml格式,主要是逻辑代码,喜欢的朋友可以测试下
    2013-01-01
  • Python如何避免文件同名产生覆盖

    Python如何避免文件同名产生覆盖

    这篇文章主要介绍了Python如何避免文件同名产生覆盖,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python如何绘制路段时变车速热力图

    python如何绘制路段时变车速热力图

    本文通过热力图形式展示了24小时内某个路段的车速变化和特定时刻某条路径的车速情况,数据是通过Numpy随机生成的,用以模拟真实的车速情况,文章还展示了如何利用pandas和seaborn库中的pivot_table()和heatmap()函数生成热力图
    2024-09-09
  • 将python安装信息加入注册表的示例

    将python安装信息加入注册表的示例

    今天小编就为大家分享一篇将python安装信息加入注册表的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Pytorch搭建YoloV5目标检测平台实现过程

    Pytorch搭建YoloV5目标检测平台实现过程

    这篇文章主要为大家介绍了Pytorch搭建YoloV5目标检测平台实现过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Python警察与小偷的实现之一客户端与服务端通信实例

    Python警察与小偷的实现之一客户端与服务端通信实例

    这篇文章主要介绍了Python警察与小偷的实现之一客户端与服务端通信实例,并附有难点及易错点的分析与说明,需要的朋友可以参考下
    2014-10-10
  • pandas行和列的获取的实现

    pandas行和列的获取的实现

    本文主要介绍了pandas行和列的获取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python+selenium破解拼图验证码的脚本

    Python+selenium破解拼图验证码的脚本

    很多网站在登录或者注册时都会遇到拼图验证码,这种拼图验证码实际上是多个小碎片经过重新组合成的一张整体。本文将和大家分享一个基于Python selenium的破解拼图验证码的脚本,需要的可以参考一下
    2022-02-02

最新评论