我在Matlab中有以下单元格,其中包含字母a,b,c,d
%all combinations containing 'a' and/or 'b'
G1={'a', 'ab', 'ac', 'ad', 'abc', 'acd', 'abd', 'abcd', 'b', 'bc', 'bd', 'bcd'};
%all combinations containing 'c' and/or 'd'
G2={'c', 'ac', 'bc', 'cd', 'abc', 'acd', 'bcd', 'abcd', 'd', 'ad', 'bd', 'abd'};
%all combinations containing 'c'
G3={'c', 'ac', 'bc', 'cd', 'acd', 'abd', 'bcd', 'abcd'};
然后我构建了维度
的单元格all
allsize=size(G1,2)*size(G2,2)*size(G3,2);
包含将G1
的一个元素与G2
的一个元素与一个G3
元素匹配的所有可能方法。
all=cell(allsize,3);
count=0;
for h=1:size(G1,2)
for k=1:size(G2,2);
for j=1:size(G3,2);
count=count+1;
all(count,1)=G1(h);
all(count,2)=G2(k);
all(count,3)=G3(j);
end
end
end
问题:我想构建维check
的向量allsize x 1
,如果[check(l)=1
包含all(l,1)
a
和 all(l,2)
包含c
] 或 [all(l,1)
包含b
和 {{ 1}}包含all(l,2)
],否则为零。
我在撰写 if condition
时遇到了问题d
你能提供一些帮助吗?
答案 0 :(得分:1)
(对于if语句,总是最好显示你尝试的而不是一些伪代码,但是......)
首先使用all
作为变量名称是不好的 - 它是一个重要的内置函数,您可能想要使用它...我已将其重命名为allG
下面。但你可能想要这样的东西:
check(l) = (any(allG{l,1}=='a') && any(allG{l,2}=='c')) || ...
(any(allG{l,1}=='b') && any(allG{l,2}=='d'))
注意我还没有使用if
语句,因为右侧评估的逻辑值(真/假值)通常可以与1和0相同的方式使用。 ..
此外,我们将字符串视为字符数组,因此'abcd'=='b'
之类的内容会返回[0 1 0 0]
逻辑数组...然后我们使用any()
来查看是否存在值为1(真)。