English 中文(简体)
鉴于一套数据点,发现一个数据点是“最封闭的”。
原标题:Given a set of data points, find the one that is "closest"

So we have a reference set of 3D points (let s call it R), and many other sets of 3D points (let s call that set of sets of data points P, and each data set in that Pi).

任务是将一些Pi和R的数据点的电子滑坡距离降至最低的Pi。 我看到的是:

  1. For each point in Pi, compare to each point in R and find the minimum difference between two points.
  2. Sum up these minimum distances to reach the minimum total "difference" between Pi and R.
  3. The answer Pi is the one with the smallest difference.

但是,这很奇怪,因为这意味着从实质上看R和P各个点之间的距离,后者可能是数千或几百万。 我肯定能够做得好于此。

我在马特拉布工作,我没有这样做。

什么是更好的算法? 是否有完善的数据结构? (例如K-D树?)

最佳回答

除非你有如此之多的疑问,即这确实是一个业绩问题,否则,与每一点相比,实际上是最容易的解决办法,特别是因为这些行动在马特拉布具有高度的矢量。

例如:

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);
问题回答

暂无回答




相关问题
MATLAB Solving equations problem

I want to solve these equations using MATLAB and I am sure there is a non zero solution. The equations are: 0.7071*x + 0.7071*z = x -0.5*x + 0.7071*y + 0.5*z = y -0.5*x - 0.7071*y +...

Difference between MATLAB s matrix notations

How do you read the following MATLAB codes? #1 K>> [p,d]=eig(A) // Not sure about the syntax. p = 0.5257 -0.8507 -0.8507 -0.5257 d = ...

preventing data from being freed when vector goes out of scope

Is there a way to transfer ownership of the data contained in a std::vector (pointed to by, say T*data) into another construct, preventing having "data" become a dangling pointer after the vector goes ...

Divide two polynomials using MATLAB

I want to divide p(x) by q(x) given that: p(x)=-5x^4+3x^2-6x q(x)=x^2+1 I tried: p=inline( -5*(x^4)+3*(x^2) , x ) p = Inline function: p(x) = -5*(x^4)+3*(x^2) q=inline( x^2+1 , x ) q = ...

matlab deals with Fibbonacci

The Fibonacci series is given as follows: 1, 2, 3, 5, 8, 13, 21, ... How can I write a script which calculates and prints the n-th Fibonacci term (for n>2), where n is inputed by the user. This ...

How do I plot lines between all points in a vector?

I have a vector containing some points in 2-D space. I want MATLAB to plot these points with lines drawn from every point to every other point. Basically, I want a graph with all vertices connected. ...

How do I create a string using a loop variable in MATLAB?

I have a loop like this: for i=1:no %some calculations fid = fopen( c:\out.txt , wt ); %write something to the file fclose(fid); end I want data to be written to different files like ...

热门标签