Find an index of a cell whose element satisfies a condition

22 views (last 30 days)
Diaa
Diaa on 18 Jun 2021
Commented: DGM on 18 Jun 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.

Accepted Answer

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

More Answers (1)

DGM
DGM on 18 Jun 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 Comments
DGM
DGM on 18 Jun 2021
Ah yeah. I had read "second column" as "second element".

Sign in to comment.

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!