How to determine which indices in a row cell array contains the value 1, even when there are null vectors [ ] in the cell array?

Hello,
If I have a row cell array,
C = {[], [], [], [], 1, 1, 1, 1, 1, 1, 4, 4, 5, 5, 5, [], [], []}
and I would like to know where in the cell array (i.e. which column) the 1 values are located. How do I grab the indices of where 1 is located because when I use the following,
d = find([b{:}] == 1)
I get the following output.
d = [1, 2, 3, 4, 5, 6]
which is not what I want because it ignores the null vector, []...Ideally, I would like the following output, or something like that.
d = [5, 6, 7, 8, 9, 10]
I'm using MATLAB 2015a btw. Any help or advice would be appreciated. Thanks.

 Accepted Answer

find(cellfun(@(x) isequal(x,1), C))

1 Comment

Hey Walter, thanks for your response. The output was just what I was looking for. I understand that cellfun applies a function to each cell of a cell array. But can you provide a little explanation as to what @(x) isequal(x,1) does and means?
UPDATE: I think I figured it out. @x creates an anonymous function. And isequal(x,1) inspects each column to see if the value is 1.

Sign in to comment.

More Answers (2)

C = {[], [], [], [], 1, 1, 1, 1, 1, 1, 4, 4, 5, 5, 5, [], [], []};
b = C;
b(cellfun(@isempty,b))={nan};
d = find([b{:}]==1);

1 Comment

Hey Andrei, thank you for your input. It's interesting how in order for
d = find([b{:}]==1);
to recognize that the null vectors, [], is a column, you have to input nan within [].

Sign in to comment.

find( cellfun( @(x) ~isempty(x) && x==1, C ))
ans =
5 6 7 8 9 10

Categories

Community Treasure Hunt

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

Start Hunting!