Combine logical cell array based on 'or' condition

17 次查看（过去 30 天）
Alex Wooten2021-5-21

I am trying to combine all elements of a cell array containing multiple logical arrays into a single array, where the single array has a true value if any of the logical arrays contain true at that index.
C{1,1} = logical([1;0;0;0;0]);
C{1,2} = logical([0;1;0;0;0]);
C{1,3} = logical([0;0;1;0;0]);
I know that if I wanted to combine 2 of the elements, I could do this:
or(C{1,1}, C{1,2})
This would give me the output:
ans =
5×1 logical array
1
1
0
0
0
Is there a way to combine all 3 logical arrays and get this as output? (preferably in a single operation)
ans =
5×1 logical array
1
1
1
0
0

采纳的回答

DGM 2021-5-21
Maybe something like this:
% test array
C{1,1} = logical([1;0;0;0;0]);
C{1,2} = logical([0;1;0;0;0]);
C{1,3} = logical([0;0;1;0;0]);
Cl = any(cell2mat(C),2)
Cl = 5×1 logical array
1 1 1 0 0
1 个评论显示隐藏 无
Alex Wooten 2021-5-21
Exactly what I was looking for, thanks!

更多回答（2 个）

Daniel Bengtson 2021-5-21
You could do something like this.
C{1,1} = logical([1;0;0;0;0]);
C{1,2} = logical([0;1;0;0;0]);
C{1,3} = logical([0;0;1;0;0]);
[~,wid] = size(C);
%false vector to use as a starting point
init = false(size(C{1,1}));
%ORs together every vector in C
for i = 1:wid
init = init | C{1,i};
end
0 个评论显示隐藏 -1更早的评论

David Fletcher 2021-5-21
C{1,1}|C{1,2}|C{1,3}

R2021a

Community Treasure Hunt

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

Start Hunting!