Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/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_Euclidean Distance - Fatal编程技术网

Matlab 给定一组数据点,找到一个;“最近的”;

Matlab 给定一组数据点,找到一个;“最近的”;,matlab,euclidean-distance,Matlab,Euclidean Distance,所以我们有一组3D点的参考集(我们称之为R)和许多其他3D点集(我们称之为数据点集p,以及该Pi中的每个数据集) 任务是返回Pi,该Pi使某些Pi和R中的数据点之间的欧几里德距离最小化。我的看法是: 对于Pi中的每个点,比较R中的每个点,并找出两点之间的最小差值 将这些最小距离相加,以达到Pi和R之间的最小总“差” 答案Pi是差异最小的一个 但这是相当疯狂的,因为它意味着从本质上看R中的每个点和p中的每个点之间的距离,可能是数千或数百万。我当然可以做得更好 我在Matlab中工作,我不习惯 使用

所以我们有一组3D点的参考集(我们称之为R)和许多其他3D点集(我们称之为数据点集p,以及该Pi中的每个数据集)

任务是返回Pi,该Pi使某些Pi和R中的数据点之间的欧几里德距离最小化。我的看法是:

  • 对于Pi中的每个点,比较R中的每个点,并找出两点之间的最小差值
  • 将这些最小距离相加,以达到Pi和R之间的最小总“差”
  • 答案Pi是差异最小的一个
  • 但这是相当疯狂的,因为它意味着从本质上看R中的每个点和p中的每个点之间的距离,可能是数千或数百万。我当然可以做得更好

    我在Matlab中工作,我不习惯


    使用哪种算法更好?是否有一种数据结构适合于此?(例如K-D树?

    除非你有如此多的点,以至于这真的成为一个性能问题,否则与每个点进行比较确实是最简单的解决方案,特别是因为这些操作可以在Matlab中高度矢量化

    例如:

    R = [1 2 3; 1 3 4];
    P{1} = [2 3 5;1 1 2;2 1 3];
    P{2} = [4 4 4];
    
    nP = length(P);
    sumMinDist = zeros(nP,1);
    
    %# make R into n-by-1-by-3 already
    Rperm = permute(R,[1 3 2]);
    
    for iP = 1:nP
    
    %# since we want to sum up the minima, we need to take the square root
    allDist = sqrt( sum( bsxfun(@minus, Rperm, permute(P{iP},[3 1 2])).^2, 3));
    
    %# sum the minima (you may want to consider
    %# taking the mean instead!)
    sumMinDist(iP) = sum(min(allDist,[],1));
    
    end
    
    %# now we can identify the closest set
    [~,idxOfClosestSet] = min(sumMinDist);