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))

运行结果贴图

总结

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

相关文章

  • Pytorch阅读文档中的flatten函数

    Pytorch阅读文档中的flatten函数

    PyTorch提供了一个非常方便的函数flatten()来完成这个任务,本文将介绍Pytorch阅读文档中的flatten函数,并提供一些示例代码,感兴趣的朋友一起看看吧
    2023-11-11
  • 使用plt.bar柱状图减小柱子之间的间隔问题

    使用plt.bar柱状图减小柱子之间的间隔问题

    这篇文章主要介绍了使用plt.bar柱状图减小柱子之间的间隔问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Django之choices选项和富文本编辑器的使用详解

    Django之choices选项和富文本编辑器的使用详解

    这篇文章主要介绍了Django之choices选项和富文本编辑器的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python保留指定位数小数的5种方法总结

    Python保留指定位数小数的5种方法总结

    很多小伙伴在学习python的时候可能会遇到对数据进行格式化输出的需求,其中最常见的需求为保留几位小数,这篇文章主要给大家介绍了关于Python保留指定位数小数的5种方法,需要的朋友可以参考下
    2023-08-08
  • Python学习之while 循环语句

    Python学习之while 循环语句

    这篇文章主要给大家介绍了关于Python中while循环语句的相关资料,使用while循环语句可以解决程序中需要重复执行的操作,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • 安装Python的web.py框架并从hello world开始编程

    安装Python的web.py框架并从hello world开始编程

    这篇文章主要介绍了安装Python的web.py框架并从hello world开始编程,web.py的作者年轻的Aaron Swartz已经离世,缅怀大神,需要的朋友可以参考下
    2015-04-04
  • 全网非常详细的pytest配置文件

    全网非常详细的pytest配置文件

    本文主要介绍了全网非常详细的pytest配置文件,pytest的主配置文件,可以改变pytest的默认行为,有很多可配置的选项,感兴趣的可以了解一下
    2022-07-07
  • python中文件夹py文件相互引用方式

    python中文件夹py文件相互引用方式

    这篇文章主要介绍了python中文件夹py文件相互引用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 详解Django中 render() 函数的使用方法

    详解Django中 render() 函数的使用方法

    这篇文章主要介绍了Django中 render() 函数的使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Python中的列表条件求和方法

    Python中的列表条件求和方法

    这篇文章主要介绍了Python中的列表条件求和方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论