matlab中自带的计算距离矩阵的函数有两个pdist和pdist2。前者计算一个向量自身的距离矩阵,后者计算两个向量之间的距离矩阵。基本调用形式如下:
D = pdist(X)
D = pdist2(X,Y)
这两个函数都提供多种距离度量形式,非常方便,还可以调用自己编写的距离函数。
需要注意的是:pdist2返回是n*n的距离矩阵,pdist则返回距离矩阵的下三角串联形式。
下面是具体的介绍:
MATLAB 距离计算
判别分析时,通常涉及到计算两个样本之间的距离,多元统计学理论中有多种距离计算公式。MATLAB中已有对应函数,可方便直接调用计算。距离函数有:pdist, pdist2, mahal, squareform, mdscale, cmdscale
主要介绍pdist2 ,其它可参考matlab help
D = pdist2(X,Y)
D = pdist2(X,Y,distance)
D = pdist2(X,Y,'minkowski',P)
D = pdist2(X,Y,'mahalanobis',C)
D = pdist2(X,Y,distance,'Smallest',K)
D = pdist2(X,Y,distance,'Largest',K)
[D,I] = pdist2(X,Y,distance,'Smallest',K)
[D,I] = pdist2(X,Y,distance,'Largest',K)
练习:
2种计算方式,一种直接利用pdist计算,另一种按公式(见最后理论)直接计算。
% distance
clc;clear;
x = rand(4,3)
y = rand(1,3)
for i =1:size(x,1)
for j =1:size(y,1)
a = x(i,:); b=y(j,:);
% Euclidean distance
d1(i,j)=sqrt((a-b)*(a-b)');
% Standardized Euclidean distance
V = diag(1./std(x).^2);
d2(i,j)=sqrt((a-b)*V*(a-b)');
% Mahalanobis distance
C = cov(x);
d3(i,j)=sqrt((a-b)*pinv(C)*(a-b)');
% City block metric
d4(i,j)=sum(abs(a-b));
% Minkowski metric
p=3;
d5(i,j)=(sum(abs(a-b).^p))^(1/p);
% Chebychev distance
d6(i,j)=max(abs(a-b));
% Cosine distance
d7(i,j)=1-(a*b')/sqrt(a*a'*b*b');
% Correlation distance
ac = a-mean(a); bc = b-mean(b);
d8(i,j)=1- ac*bc'/(sqrt(sum(ac.^2))*sqrt(sum(bc.^2)));
end
end
md1 = pdist2(x,y,'Euclidean');
md2 = pdist2(x,y,'seuclidean');
md3 = pdist2(x,y,'mahalanobis');
md4 = pdist2(x,y,'cityblock');
md5 = pdist2(x,y,'minkowski',p);
md6 = pdist2(x,y,'chebychev');
md7 = pdist2(x,y,'cosine');
md8 = pdist2(x,y,'correlation');
md9 = pdist2(x,y,'hamming');
md10 = pdist2(x,y,'jaccard');
md11 = pdist2(x,y,'spearman');
D1=[d1,md1],D2=[d2,md2],D3=[d3,md3]
D4=[d4,md4],D5=[d5,md5],D6=[d6,md6]
D7=[d7,md7],D8=[d8,md8]
md9,md10,md11
运行结果如下:
x =
0.5225 0.6382 0.6837
0.3972 0.5454 0.2888
0.8135 0.0440 0.0690
0.6608 0.5943 0.8384
y =
0.5898 0.7848 0.4977
D1 =
0.2462 0.2462
0.3716 0.3716
0.8848 0.8848
0.3967 0.3967
D2 =
0.8355 0.8355
1.5003 1.5003
3.1915 3.1915
1.2483 1.2483
D3 =
439.5074 439.5074
437.5606 437.5606
438.3339 438.3339
437.2702 437.2702
D4 =
0.3999 0.3999
0.6410 0.6410
1.3934 1.3934
0.6021 0.6021
D5 =
0.2147 0.2147
0.3107 0.3107
0.7919 0.7919
0.3603 0.3603
D6 =
0.1860 0.1860
0.2395 0.2395
0.7409 0.7409
0.3406 0.3406
D7 =
0.0253 0.0253
0.0022 0.0022
0.3904 0.3904
0.0531 0.0531
D8 =
1.0731 1.0731
0.0066 0.0066
1.2308 1.2308
1.8954 1.8954
md9 =
1
1
1
1
md10 =
1
1
1
1
md11 =
1.5000
0.0000
1.5000
2.0000
基本理论公式如下:
paper 120:计算距离矩阵的函数的pdist和pdist2函数的更多相关文章
-
Keil C51 中的函数指针和再入函数
函数指针是C语言中几个难点之一.由于8051的C编译器的独特要求,函数指针和再入函数有更多的挑战需要克服.主要由于函数变量的传递.典型的(绝大部分8051芯片)函数变量通过堆栈的入栈和出栈命令来传递. ...
-
JavaScript (四) js的基本语法 - - 函数练习、arguments、函数定义、作用域、预解析
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.函数练习 1.求最值 // - 求2个数中的最大值 function getMax(num1, nu ...
-
Sql Server函数全解<;一>;字符串函数
阅读目录 1.ASCII()函数 2.CHAR()函数 3.LEFT()函数 4.RIGHT()函数 5.LTRIM()函数 6.RTRIM()函数 7.STR()函数 8.字符串逆序的函数REVER ...
-
Sql Server函数全解(一)字符串函数
字符串函数用于对字符和二进制字符进行各种操作 1.ASCII()函数 ASCII(character_expression)函数用于返回字符串表达式中最左侧的ASCII代码值.参数character ...
-
sql server ,OVER(PARTITION BY)函数用法,开窗函数,over子句,over开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx https://social.msdn.microsoft.c ...
-
学习hash_map从而了解如何写stl里面的hash函数和equal或者compare函数
---恢复内容开始--- 看到同事用unordered_map了所以找个帖子学习学习 http://blog.sina.com.cn/s/blog_4c98b9600100audq.html (一)为 ...
-
Python的函数式编程-传入函数、排序算法、函数作为返回值、匿名函数、偏函数、装饰器
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
-
Shell函数:Shell函数返回值、删除函数、在终端调用函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...
-
[php基础]Mysql日期函数:日期时间格式转换函数详解
在PHP网站开发中,Mysql数据库设计中日期时间字段必不可少,由于Mysql日期函数输出的日期格式与PHP日期函数之间的日期格式兼容性不够,这就需要根据网站实际情况使用Mysql或PHP日期转换函数 ...
随机推荐
-
HTML5的File API读取文件信息
html结构: <div id="fileImage"></div> <input type="file" value=" ...
-
【日记】搭建一个node本地服务器
用node搭建一个本地http服务器.首先了解htpp服务器原理 HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型 ...
-
面向小白的JS笔记 - #Codecademy#学习笔记
前言 最初浏览过<JavaScript秘密花园>,前一段时间读过一点点<JavaScript语言精粹>和一点点<JavaScript高级程序设计>(一点点是指都只是 ...
-
MySQL5.7更改密码时出现ERROR 1054 (42S22): Unknown column &#39;password&#39; in &#39;field list&#39;
转自:http://blog.csdn.net/u010603691/article/details/50379282 新安装的MySQL5.7,登录时提示密码错误,安装的时候并没有更改密码,后来通过 ...
-
UVA 657 The die is cast
The die is cast InterGames is a high-tech startup company that specializes in developing technolo ...
-
struts2入门
好久没有动博客了.今天看了一下慕课网的视频,简单了解一下struts2. 首先是在项目中引入struts2的文件,有一个比较简单的方法就是可以直接右键项目MyEclipse->Project f ...
-
【cocos 2d-x】VS2013+cocos2d-x3.3Final+Adriod交叉编译环境配置(超详细版)
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.com ...
-
调皮的程序员:Linux之父雕刻在Linux内核中的故事
本文内容由公众号“格友”原创分享. 1.引言 (不羁的大神,连竖中指都这么帅) 因为LINUX操作系统的流行,Linus 已经成为地球人都知道的名人.虽然大家可能都听过钱钟书先生的名言:“假如你吃 ...
-
MySql cmd下的学习笔记 —— 有关表的操作(对表的增删改查)
create table 表名 ( 列名1 列属性, 列名2 列属性 ... ... 列名n 列属性 )engine myisam charset utf8; (增加表的一列) (一)在表的最末列增加 ...
-
python正则检测密码合法性
客户系统升级,要求用户密码符合一定的规则,即:包含大小写字母.数字.符号,长度不小于8,于是先用python写了个简单的测试程序: #encoding=utf-8 #----------------- ...