Find an index of a cell whose element satisfies a condition

37 visualizaciones (últimos 30 días)
Diaa
Diaa el 18 de Jun. de 2021
Comentada: DGM el 18 de Jun. de 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.

Respuesta aceptada

Star Strider
Star Strider el 18 de Jun. de 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
.

Más respuestas (1)

DGM
DGM el 18 de Jun. de 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 comentarios
Diaa
Diaa el 18 de Jun. de 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 el 18 de Jun. de 2021
Ah yeah. I had read "second column" as "second element".

Iniciar sesión para comentar.

Categorías

Más información sobre Structures en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by