Find an index of a cell whose element satisfies a condition

35 vues (au cours des 30 derniers jours)
Diaa
Diaa le 18 Juin 2021
Commenté : DGM le 18 Juin 2021
Is there a way to economically fix the code below to make it work so that it returns the index of the cell element whose array has the number 1 in its second column?
c = {[1,2,3], [2,3,1], [3,1,2]};
find(c{:}(:,2)==1) % expected result is the cell index 3
The code above gets me this error:
Intermediate brace {} indexing produced a comma-separated list with 3 values, but it must produce a single value to perform subsequent indexing operations.
I came up with this one
find(~cellfun(@isempty,(cellfun(@(x) find(x(:,2)==1,1),c,'un',0))))
but I would like to find some other efficient ways of doing it.

Réponse acceptée

Star Strider
Star Strider le 18 Juin 2021
Try this —
c = {[1,2,3], [2,3,1], [3,1,2]};
idx = cellfun(@(x)x(:,2)==1, c, 'Unif',0)
idx = 1×3 cell array
{[0]} {[0]} {[1]}
Out = find([idx{:}])
Out = 3
.

Plus de réponses (1)

DGM
DGM le 18 Juin 2021
This is one way:
c = {[1,2,3], [2,3,1], [3,1,2], [1,2,3], [2,3,1], [3,1,2]};
idx = find(cellfun(@(x) x(2)==1,c))
idx = 1×2
3 6
  2 commentaires
Diaa
Diaa le 18 Juin 2021
I think your code will fail in this example
c = {[1,2,3;1,2,3], [2,3,1], [3,1,2;3,6,9]}; find(cellfun(@(x) x(2)==1,c))
DGM
DGM le 18 Juin 2021
Ah yeah. I had read "second column" as "second element".

Connectez-vous pour commenter.

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by