Matlab - 仅返回矩阵“A”的行,这些行不包含矩阵“B”的某些值

时间:2014-01-09 15:25:15

标签: matlab

如何仅返回不包含某些值的矩阵“A”的行(这些值是数组'B')?

  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)

提前感谢您的帮助

1 个答案:

答案 0 :(得分: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'

当然,如果可以仅使用实际矩阵中的每个搜索字符串的数字分量而不是字符串的单元格数组,那么这些计算可以更快地进行。