Matlab:帮助找到最小距离

时间:2016-06-13 22:49:38

标签: matlab distance

我试图找到与候选集最小距离的点。 Z是矩阵,其中行是维度,列表示点。计算点间距离,然后以最小距离和距离记录点。以下是代码段。该代码适用于小维度和小集合点。但是,大数据集需要很长时间(N = 100万个数据点,维度也很高)。有效的方法吗?

1 个答案:

答案 0 :(得分:3)

我建议您使用pdist为您做繁重的工作。此函数将计算阵列中每两个点之间的成对距离。必须使用squareform将生成的矢量放入矩阵形式,以便找到每对的最小值:

N = 100;
Z = rand(2,N);  % each column is a 2-dimensional point

% pdist assumes that the second index corresponds to dimensions
% so we need to transpose inside pdist()
distmatrix = squareform(pdist(Z.','euclidean')); % output is [N, N] in size
% set diagonal values to infinity to avoid getting 0 self-distance as minimum
distmatrix = distmatrix + diag(inf(1,size(distmatrix,1)));
mindists = min(distmatrix,[],2); % find the minimum for each row
sum_dist = sum(mindists); % sum of minimal distance between each pair of points

这计算每对两次,但我认为这适用于您的原始实现。

这个想法是pdist计算其输入列之间的成对距离。因此,我们将Z转置为pdist。由于完整输出始终是具有零对角线的方阵,因此实现pdist使得它仅在向量中返回对角线上方的值。因此,需要调用squareform才能获得适当的距离矩阵。然后,必须找到该矩阵的行方向最小值,但首先我们必须排除对角线中的零点。我很懒,所以我将inf放入对角线,以确保最小值在其他地方。最后,我们只需总结最小距离。

相关问题