目前我正在使用pdist
Matlab 中的函数来计算三维笛卡尔系统中各个点之间的欧几里得距离。我这样做是因为我想知道哪个点与所有其他点(中心点)的平均距离最小。的语法pdist
如下所示:
% calculate distances between all points
distances = pdist(m);
但是因为 pdist 返回距离的一维数组,所以没有简单的方法可以(直接)确定哪个点的平均距离最小。这就是我使用squareform
然后计算最小平均距离的原因,如下所示:
% convert found distances to matrix of distances
distanceMatrix = squareform(distances);
% find index of point with smallest average distance
[~,j] = min(mean(distanceMatrix,2));
对每列的距离进行平均,变量j
是具有最小平均距离的列(和点)的索引。
这行得通,但是 squareform 需要很多时间(这段代码重复了数千次),所以我正在寻找一种优化它的方法。有谁知道一种更快的方法来从结果中推断出平均距离最小的点pdist
?