You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab计算点到原点(0,0)的距离 除循环外还有什么实现方法?

多点点到原点距离的Matlab优化实现

你当前用循环调用pdist的实现逻辑是对的,但运行效率很低,尤其处理大量点的时候性能会很差,下面给出3种更优的向量化实现方案:

  • 方案1:直接用欧氏距离公式实现(无额外工具箱依赖,性能最优)
    直接对坐标做逐元素运算,不需要循环也不需要调用距离函数,代码如下:
clc;
clear all;
x1 = 1:11;
y1 = [1;1;11;16;19;3;14;5;16;10;22];
% 直接向量化计算所有点到原点的欧氏距离
distResult = sqrt(x1(:).^2 + y1(:).^2);

这里的x1(:)是将数组统一转为列向量,避免行列不匹配的运算报错,运算后得到的distResult是和点数量等长的列向量,每个元素对应一个点到原点的距离。

  • 方案2:单次调用pdist实现(不需要循环)
    如果需要保留用pdist的写法,不需要逐点构造矩阵循环调用,把所有点和原点合并为一个矩阵单次计算即可:
clc;
clear all;
x1 = 1:11;
y1 = [1;1;11;16;19;3;14;5;16;10;22];
% 拼接所有目标点+原点为统一坐标矩阵
points_mat = [x1(:), y1(:); 0, 0];
% 单次调用pdist计算所有两两距离,提取每个点到原点的距离
all_dist = pdist(points_mat, 'euclidean');
distResult = all_dist(end - length(x1) + 1: end);
  • 方案3:用pdist2直接计算两组点的距离(需要统计和机器学习工具箱,写法最简洁)
    pdist2支持直接计算两组点之间的两两距离,一行即可得到结果:
clc;
clear all;
x1 = 1:11;
y1 = [1;1;11;16;19;3;14;5;16;10;22];
distResult = pdist2([x1(:), y1(:)], [0, 0], 'euclidean');

三种方案都完全避免了循环,相比你当前的实现,在点数量超过1万的时候,性能可以提升数十倍以上。

内容的提问来源于stack exchange,提问作者hsi100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:15:02