Find the closest match values in cell array
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi guys, I got a cell array and I want to find the index of the array that closest match my defined values. Here is my cell array:
A =
[565.11,579.965]
[567.016,581.921]
[574.162,589.256]
575.909
[568.804,583.373]
[570.197,584.803]
[566.005,576.676,587.758]
As you can see the length of each row is not the same, that's why I couldn't put it in the form of a normal array. So, if I want to find the index that is the closest match 567.5 and 586.5. How can I do that?
Thanks!
0 commentaires
Réponses (2)
the cyclist
le 10 Mar 2017
Here's one way:
A = {
[565.11,579.965]
[567.016,581.921]
[574.162,589.256]
575.909
[568.804,583.373]
[570.197,584.803]
[566.005,576.676,587.758]};
val = 567.5;
[~,indexToClosestMatch] = min(cellfun(@(x)min(abs(x-val)),A));
3 commentaires
Image Analyst
le 10 Mar 2017
So what's wrong with just doing it twice???
val = 567.5;
[~,indexToClosestMatch1] = min(cellfun(@(x)min(abs(x-val)),A));
val = 586.5;
[~,indexToClosestMatch2] = min(cellfun(@(x)min(abs(x-val)),A));
Star Strider
le 10 Mar 2017
‘How can I do that?’
One approach:
A = {[565.11,579.965]
[567.016,581.921]
[574.162,589.256]
575.909
[568.804,583.373]
[570.197,584.803]
[566.005,576.676,587.758]};
v = [567.5 586.5];
sz = cellfun(@(x)size(x,2), A, 'Uni',0); % Calculate Sizes Of Vectors
A_idx = cellfun(@(x)eq(x,2), sz, 'Uni',0); % Select Only Elements Of ‘A’ With 2 Columns
A_sel = A(cell2mat(A_idx)); % Elements Of ‘A’ Meeting Criteria
D = pdist2(v,cell2mat(A_sel)); % Distance Between ‘v’ And Elements Of ‘A’
[~,MinIdx] = min(D); % Indes OF Minimum Distance
A_closest = A_sel{MinIdx} % Element Values Of Minimum Distance
A_closest =
570.2 584.8
5 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!