曼哈顿距离的一种思路

本文介绍了一种将二维坐标系中的点通过简单的数学运算转换为另一种形式的方法,这种转换可以简化曼哈顿距离的计算过程。具体地,将点 (x, y) 转换为 (x+y, x-y),此时两点之间的曼哈顿距离可以通过计算它们的最大坐标差获得,即 max(|x1-x2|, |y1-y2|)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将每个点变成(x+y,x-y)

那么求两个点的曼哈顿距离就是max(|x1-x2|,|y1-y2|)

转载于:https://www.cnblogs.com/maijing/p/4649442.html

<think>好的,我现在需要帮助用户用Matlab绘制曼哈顿距离、欧几里得距离、闵可夫斯基距离、切比雪夫距离和余弦相似度的示意图。首先,我得确认用户的需求是什么。用户可能希望直观比较这些距离度量在二维空间中的表现,尤其是在不同参数下的差异。 首先,我得考虑如何生成这些距离的示意图。对于曼哈顿、欧氏、切比雪夫距离,通常可以绘制它们的等距轮廓线,比如在二维平面上,距离原点相等的点组成的图形。曼哈顿距离是菱形,欧氏是圆形,切比雪夫是正方形。闵可夫斯基距离在参数p变化时,形状会从菱形过渡到正方形,中间的p值比如p=2就是欧氏距离。余弦相似度可能需要用向量之间的夹角来表示,可能需要绘制两个向量及其夹角,或者用颜色映射表示相似度值。 接下来,我需要确定Matlab的实现方法。绘制等距线可以使用网格点计算距离,然后用contour或scatter绘图。对于每个距离,可能需要生成网格点坐标,计算每个点到原点的距离,然后绘制等高线图。例如,曼哈顿距离的等高线是菱形,可以用[X,Y] = meshgrid生成坐标,计算abs(X)+abs(Y),然后contour显示。 对于余弦相似度,可能需要计算两个向量之间的夹角余弦值。用户可能需要绘制两个向量,并用颜色或标注显示余弦值的大小。或者,用向量方向的热图来展示不同角度的余弦相似度。 还需要考虑如何将这些不同的距离图示放在同一图像中进行比较,或者分别生成多个子图。用户可能需要清晰的视觉效果,所以颜色映射的选择和标签的添加很重要。 然后,检查Matlab中相关函数的正确使用,比如meshgrid、contour、quiver(用于画向量)、colormap等。确保代码语法正确,并且注释清晰,方便用户理解和修改参数。 此外,用户可能希望代码可调节参数,比如闵可夫斯基距离的p值,或者向量的位置,这样他们可以自己调整查看不同情况下的效果。所以,在代码中设置变量如p值,并给出注释说明如何修改。 最后,生成相关问题,确保符合用户可能的进一步需求,比如如何比较不同距离的应用场景,或者如何扩展到高维空间,以及性能优化的问题。 现在需要将这些思路转化为具体的Matlab代码,并确保每个距离的图示清晰正确。同时,验证每个部分的代码是否正确,例如闵可夫斯基距离的计算是否正确,余弦相似度的图示是否准确。可能还需要测试代码,确保没有语法错误,并且图形输出符合预期。</think>以下是使用MatLAB绘制五种距离/相似度示意图的完整方案,包含可调节参数和可视化代码: ### 一、曼哈顿距离示意图 ```matlab [X,Y] = meshgrid(-5:0.1:5); D = abs(X) + abs(Y); % 曼哈顿距离公式 contourf(X,Y,D,20); colormap(jet); colorbar; hold on; quiver(0,0,3,2,'r','LineWidth',2); % 示例向量 title('曼哈顿距离等值线图'); axis equal; ``` ![示意图说明:红色菱形等值线,距离原点越远颜色越暖][^2] ### 二、欧氏距离示意图 ```matlab D = sqrt(X.^2 + Y.^2); % 欧氏距离公式 contourf(X,Y,D,20); title('欧几里得距离等值线图'); ``` ![示意图说明:标准圆形等值线][^3] ### 三、切比雪夫距离示意图 ```matlab D = max(abs(X), abs(Y)); % 切比雪夫距离公式 contourf(X,Y,D,20); title('切比雪夫距离等值线图'); ``` ![示意图说明:正方形等值线][^4] ### 四、闵可夫斯基距离示意图 ```matlab p = 3; % 可调节参数 D = (abs(X).^p + abs(Y).^p).^(1/p); contourf(X,Y,D,20); title(['闵可夫斯基距离(p=',num2str(p),')']); ``` ![示意图说明:形状随p值变化][^5] ### 五、余弦相似度示意图 ```matlab theta = 0:0.01:2*pi; v1 = [1,0]; % 基准向量 similarity = zeros(size(X)); for i = 1:size(X,1) for j = 1:size(Y,2) v2 = [X(i,j),Y(i,j)]; similarity(i,j) = dot(v1,v2)/(norm(v1)*norm(v2)); end end contourf(X,Y,similarity,20); title('余弦相似度分布图'); ``` ![示意图说明:颜色表示与x轴正方向的夹角余弦值][^6]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值