2017-04-19 43 views
0

的字母串聲明我在Matlab的含字母a,b,c,d如果用在Matlab

%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 

問題:我想要構造尺寸的向量checkallsize x 1使得check(l)=1如果[all(l,1)包含aall(l,2)包含c] [all(l,1)包含ball(l,2)包含d] ,否則爲零。

我有書面如果條件

check=zeros(allsize,1); 

for l=1:allsize 
    %if [all(l,1) contains a and all(l,2) contains c] or [all(l,1) contains b and all(l,2) contains d] 
    check(l)=1; 
    %end 
end 

你能請提供一些幫助的問題?

+0

由於'all'的尺寸爲'1152x3',所以它的時間太長了。 – user3285148

回答

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 (真正)。