Combine logical cell array based on 'or' condition

39 ビュー (過去 30 日間)
Alex Wooten
Alex Wooten 2021 年 5 月 21 日
コメント済み: Alex Wooten 2021 年 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
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
Alex Wooten 2021 年 5 月 21 日
Exactly what I was looking for, thanks!

サインインしてコメントする。

その他の回答 (2 件)

Daniel Bengtson
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

David Fletcher
David Fletcher 2021 年 5 月 21 日
C{1,1}|C{1,2}|C{1,3}

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by