Matlab pdist输入数据设置错误 如何正确计算每行两点欧氏距离
问题原因
- Matlab的
pdist函数默认计算输入矩阵所有行两两之间的成对距离,你输入的dArray是12行4列的矩阵,12个行向量的两两组合数为12*11/2=66,因此会输出66个结果,和你逐行计算对应点距离的需求不匹配。
正确实现方案
方案1:直接向量化计算(推荐,性能更高)
你需要的是每行内(x1,y1)到同一行(x2,y2)的欧氏距离,直接用向量运算即可实现,无需调用pdist:
clc; clear all; x1 = [0;0;1;0;9;3;4;5;6;10;11;22]; y1 = [0;1;11;10;19;13;14;15;16;10;22;12]; x2 = [1;1;2;3;4;5;6;7;8;9;10;11]; y2 = [1;1;2;3;4;5;16;17;18;19;15;18]; % 逐行计算欧氏距离 D = sqrt((x1 - x2).^2 + (y1 - y2).^2);
注:你给出的x1、y1、x2、y2都是12个元素的向量,计算后会得到12个距离结果,你提到的预期10个可能是笔误。
方案2:使用pdist实现
如果必须使用pdist函数完成计算,可以逐行提取对应两个点单独计算距离:
D = zeros(length(x1), 1); for i = 1:length(x1) % 构造当前行两个点的2行2列坐标矩阵,计算两点距离 D(i) = pdist([x1(i), y1(i); x2(i), y2(i)], 'euclidean'); end
内容的提问来源于stack exchange,提问作者alirazi
相关产品推荐
相关产品推荐

