eg:
x=[1 2; 1 3; 2 2; 3 1]
[mx, nx] = size(x)
Dis=ones(mx, nx)
Cov=cov(x)
for i=1:mx
for j=1:nx
D(i,j)=((x(i,:)-x(j,:))*inv(C)*(X(i,:)-X(j,:))')^0.5
end
end
_____
D= 0 2.3452
2.3452 0
2.000 1.2247
2.3452 2.4495
------------2.3452 : x的第一行向量与第二行之间的马氏距离
———— 2.000 第一行与第三行~~~
如果直接调用距离函数则为:
Y=pdist(X, 'mahal')
Y=2.3452 2.0000 2.3452 1.2247 2.4495 1.2247
这里的Y是按对角线0左下角的方式从第一列开始排列的~~~
如果想要直观的矩阵,则用函数:y=squreform(y)
ps: matlab相对还是比较好用的啊~~~
以上是百度文库看到的,因为不能下载,就敲下来了,反正也不麻烦,记着以后用的~
又及:对单列可处理,单行不行。所以如果是批量处理中,读取行的值后,要将其转置为列向量(')
两个样本:
His1 = {3,4,5,6}
His2 = {2,2,8,4}
它们的均值为:
U = {2.5, 3, 6.5, 5}
协方差矩阵为:
S =
| 0.25 0.50 -0.75 0.50 |
| 0.50 1.00 -1.50 1.00 |
|-0.75 -1.50 2.25 -1.50 |
| 0.50 1.00 -1.50 1.00 |
其中S(i,j)={[His1(i)-u(i)]*[His1(j)-u(j)]+[His2(i)-u(i)]*[His2(j)-u(j)]}/2
下一步就是求出逆矩阵S^(-1)
马氏距离 D=sqrt{[His1-His2] * S^(-1) * [(His1-His2)的转置列向量]}