Find the closest match values in cell array
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!
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
Catherine
le 10 Mar 2017
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
She’s looking for a row match with an impossible condition.
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
Catherine
le 10 Mar 2017
Star Strider
le 10 Mar 2017
‘last row of A with 576.676 and 587.758 in the 2nd and 3rd column’
It would have been helpful if you had mentioned that in your original Question. Such details are important.
Cell array indexing is difficult, and that is not possible.
Catherine
le 15 Mar 2017
Star Strider
le 15 Mar 2017
No worries. My pleasure.
Catherine
le 15 Mar 2017
Catégories
En savoir plus sur Matrix Indexing dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!