Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:帮助查找最小距离_Matlab_Distance - Fatal编程技术网

Matlab:帮助查找最小距离

Matlab:帮助查找最小距离,matlab,distance,Matlab,Distance,我试图找到距离候选集最小的点。Z是一个矩阵,其中行表示尺寸,列表示点。计算点间距离,然后记录具有最小距离的点及其距离。下面是代码片段。该代码适用于小尺寸和小的点集。但是,对于大型数据集(N=100万个数据点,维数也很高),需要很长时间。有没有有效的方法 我建议你用它来帮你搬重物。此函数将计算阵列中每两点之间的成对距离。必须使用将结果向量转换为矩阵形式,以便找到每对向量的最小值: N = 100; Z = rand(2,N); % each column is a 2-dimensional p

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

我建议你用它来帮你搬重物。此函数将计算阵列中每两点之间的成对距离。必须使用将结果向量转换为矩阵形式,以便找到每对向量的最小值:

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
放在对角线上,以确保最小值在别处。最后,我们只需总结最小距离。

如果您有足够的内存和必要的工具箱,请看一看。查看我链接的文档,
pdist
的输出似乎将是一个
[N,N-1]
大小的矩阵:每个点相对于每个其他点的距离。您只需要找到每行矩阵的最小值。换句话说,
min(pdist(Z,'euclidean'),[],2)
应该是每个点的最小近邻距离,而
sum()
ming这将为您提供所需的信息。当然,您需要将其检查到正确的实现中,但它应该非常简单。这是一个向量,因为您错过了我评论的最后一部分:您需要在该向量上使用
sum()
来对其进行总结……对不起,您是对的。问题是,我们需要调用
squareform()
pdist
获得适当的矩阵输出,然后我们还必须处理矩阵的对角线,以避免找到每个点与自身的0距离。
pdist
也需要进行必要的换位。这个问题非常重要,我确实添加了一个答案,请参见下文。@SrishtiM虽然听起来很有趣,但不幸的是,我对这个主题一无所知,所以我无法帮助您:)