前言
搜索这个标题时看到好多都是用二维数据算马氏距离,找了半天看到几个三维的,但语言是matlab,所以就写个python的记录一下。本文适用于知道这是个距离,不想了解公式,copy直接能用的情况。
代码
from scipy.spatial.distance import mahalanobis
import numpy as np
a = np.array([10,15,29])
b = np.array([15,46,13])
c = np.array([23,21,30])
d = np.array([11,9,35])
x = np.array([a,b,c,d]).T
# 算b与d马氏距离
cov = np.cov(x)
inv = np.linalg.inv(cov)
# 一步一步算
res = (np.matmul(np.matmul((b-d) , inv),(b-d).T)) ** 0.5
print('res =', res)
# 调包计算
dis = mahalanobis(b, d, cov)
print('dis =', dis)
两种方法算出的res与dis一致,包的三个输入说明如下:
mahalanobis包官方说明