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

1 次查看(过去 30 天)
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.

采纳的回答

Walter Roberson
Walter Roberson 2015-7-25
find(cellfun(@(x) isequal(x,1), C))
  1 个评论
George Vuong
George Vuong 2015-7-27
编辑:George Vuong 2015-7-27
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.

请先登录,再进行评论。

更多回答(2 个)

Andrei Bobrov
Andrei Bobrov 2015-7-25
编辑:Andrei Bobrov 2015-7-25
C = {[], [], [], [], 1, 1, 1, 1, 1, 1, 4, 4, 5, 5, 5, [], [], []};
b = C;
b(cellfun(@isempty,b))={nan};
d = find([b{:}]==1);
  1 个评论
George Vuong
George Vuong 2015-7-27
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 [].

请先登录,再进行评论。


Cedric
Cedric 2015-7-25
编辑:Cedric 2015-7-25
find( cellfun( @(x) ~isempty(x) && x==1, C ))
ans =
5 6 7 8 9 10

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by