2014-01-09 112 views
1

如何僅返回不包含某些值的矩陣'A'的行(這些值是數組'B')?Matlab - 僅返回不包含矩陣'B'的某些值的矩陣'A'的行

A = {'A1', 5 'P01,P02,P03,P04,P07'; 
     'A2' 7, 'P07,P10'; 
     'A3' 8, 'P07,P09'; 
     'A4' 8, 'P10,P11'}; 

    B = { 'P07'; 'P10'; 'P11'}; 

我只需要返回:提前

'A1' (P01,P02,P03,P04 not exist in B) 
'A3' (P09 not exist in B) 

感謝您的幫助

+0

直接用'for循環'遍歷單元格數組A的行,然後使用'strcmp'檢查第三個元素以包含B的任何值;如果不是這樣返回每個這些行的第一個元素... – Trilarion

+0

@ Trilarion。良好的計劃,但'strcmp'不會工作 –

+0

有沒有更好的表現循環的方式? – TimeIsNear

回答

3

因爲你面對的古怪形狀的電池陣列和一些奇怪的字符串操作,我不知道如何用一個聲明乾淨地解決這個問題。你可以試試下面的循環:

R = {}; 
for i = 1 : size(A, 1) 
    test = strsplit(A{i, 3}, ','); 
    for j = 1 : length(test) 
     if nnz(strcmp(B, test{j})) == 0 
      R = [R; A(i, 1)]; 
      break; 
     end 
    end 
end 

結果是:

R = 

    'A1' 
    'A3' 

當然,這些計算可以更快地取得,如果有可能,在每個搜索字符串的只是數字組件協同工作一個實際的矩陣而不是單元格的字符串數組。

+0

只返回'A4' – TimeIsNear

+0

@TimeIsNear。固定。我誤解了您的情況 –

+0

感謝您的幫助。小問題爲什麼使用「nnz」? – TimeIsNear

相關問題