曼哈顿距离

定义

在二维空间内,两个点之间的曼哈顿距离(Manhattan distance)为它们横坐标之差的绝对值与纵坐标之差的绝对值之和。设点A(x1,y1),B(x2,y2) ,则A,B  之间的曼哈顿距离用公式可以表示为:

d(A,B)=|x1-x2|+|y1-y2|

图形

如下图红色线段为AB之间曼哈顿距离

性质

除了公式之外,曼哈顿距离还具有以下数学性质:

  • 非负性

    曼哈顿距离是一个非负数。

    d(A,B)>=0

  • 统一性

    点到自身的曼哈顿距离为 0

  • 对称性

    A 到B 与 B到 A的曼哈顿距离相等,且是对称函数。

     d(A,B)=d(B,A)

  • 三角不等式

    从点A到B的直接距离不会大于途经的任何其它点K的距离。

    d(A,B)<=d(A,K)+d(K,B)

### 实现曼哈顿距离计算 在MATLAB中,可以利用内置函数`pdist2`来方便地计算不同类型的距离度量,包括曼哈顿距离。对于较旧版本的MATLAB,在2011年之前可能不支持此功能或者仅提供有限的距离选项[^3]。 为了确保兼容性和更多的距离测量选择,推荐使用最新版MATLAB执行如下操作: #### 使用 `pdist2` 函数直接调用 如果只需要简单地获取两组数据间的所有成对曼哈顿距离,则可以直接应用`pdist2`函数并指定 `'cityblock'` 参数作为距离类型: ```matlab % 定义样本点集A和B A = rand(5, 3); % A是一个包含5个三维点的数据集 B = rand(7, 3); % B是另一个含有7个三维点的数据集 % 计算A与B之间所有组合的曼哈顿距离 D_cityblock = pdist2(A, B, 'cityblock'); ``` 这段代码会返回一个矩阵`D_cityblock`,其中每一项代表来自集合A的一个点到集合B中对应位置处另一点之间的曼哈顿距离。 #### 手动编写曼哈顿距离公式 当无法访问新版本软件或是希望更深入理解算法原理时,也可以手动定义曼哈顿距离公式来进行计算。下面给出了一种基于绝对差之和的方式实现该方法的例子: ```matlab function D = manhattan_distance(X,Y) % X 和 Y 是 n×m 的数值型数组,分别表示两个具有相同维度特征空间内的多个实例 [~, colsX] = size(X); [~, colsY] = size(Y); if colsX ~= colsY error('输入矩阵应有相同的列数.'); end % 初始化输出矩阵 rowsX = size(X, 1); rowsY = size(Y, 1); D = zeros(rowsX,rowsY); for i=1:rowsX for j=1:rowsY diffVec = abs(X(i,:) - Y(j,:)); D(i,j) = sum(diffVec); end end end ``` 上述自定义函数接受两个同维数的向量或矩阵作为参数,并逐元素相减取绝对值得到差异向量后再求和得到最终的结果。这相当于按照每个属性上的差距累加起来形成总的距离得分[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李,今天刷题了嘛

谢谢啦,随便写着玩,记录学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值