Find closest matrix from list

1 visualizzazione (ultimi 30 giorni)
Andrew
Andrew il 30 Lug 2013
I've got a matrix A(3x4) and a list of similar matrix M(i).x, where i=1:100. I need to find the matrix from list M which will be closest to my matrix A. How can I do that?
  3 Commenti
Iain
Iain il 30 Lug 2013
closest in what sense?
if:
A = [0 1];
which would be closer
M(1).x = [0 1000];
M(2).x = [500 501];
M(3).x = [200 -200];
Jan
Jan il 30 Lug 2013
Modificato: Jan il 30 Lug 2013
@lain: On first sight M(1).x is closest, because it is found in the topmost line. But if A is defined after M, M(3).x is closest. ;-)

Accedi per commentare.

Risposte (3)

Jan
Jan il 30 Lug 2013
bestValue = -Inf;
bestIndex = 0;
for k = 1:numel(M)
Value = getDistance(A, M(k).x);
if Value > bestValue
bestValue = Value;
bestIndex = k;
end
end
Now insert your criterion to determine the distance as you like. Perhaps you are looking for "Value < bestValue" and want to start with +Inf.
  1 Commento
Andrew
Andrew il 30 Lug 2013
Sorry. but I can't find function getDistance in a Matlab Help

Accedi per commentare.


Azzi Abdelmalek
Azzi Abdelmalek il 30 Lug 2013
Modificato: Azzi Abdelmalek il 30 Lug 2013
I propose this criterion sum(abs(a-b)) to be the smallest
for k=1:100
s(k)=sum(sum(abs(A-M(k).x)))
end
[~,idx]=min(s);
Res=M(idx).m

Andrew
Andrew il 30 Lug 2013
Modificato: Andrew il 30 Lug 2013
Sorry for incomplete question.
For example I've got matrix A[ 1 2 2; 1 2 3; 1 2 4] and in a list is present matrix M(3).x=[ 1 2 3; 1 2 3; 1 2 4] and M(4).x=[ 1 2 4; 1 2 3; 1 2 4]. Than matrix M(3).x will be closest. A can't use mean or sum of values in matrix to compare.
  6 Commenti
Iain
Iain il 30 Lug 2013
The question is what definition are you using for "distance" all these are valid options...
distance = max(abs(A(:)-M(i).x(:)));
distance = sum(abs(A(:)-M(i).x(:)));
distance = sum((A(:)-M(i).x(:)).^2);
distance = max(abs(A(:)-M(i).x(:)+mean(M(i).x(:))-mean(A(:)) ));
Andrew
Andrew il 30 Lug 2013
Oh, I've just realized that I can use
distance = sum(abs(A(:)-M(i).x(:)));
to find the closest and use
distance = max(abs(A(:)-M(i).x(:)));
to cut off that values which are too "far". Okay, thanks a lot for your help!! I will try to do that.

Accedi per commentare.

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by