Matlab - возвращает только те строки матрицы "A", которые не содержат некоторые значения матрицы "B"

Как вернуть только те строки матрицы "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 ответ

Решение

Так как вы имеете дело с массивами ячеек странной формы и некоторыми странными строковыми операциями, я не знаю, как решить это чисто одним утверждением. Вы можете попробовать следующий цикл:

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'

Конечно, эти вычисления можно было бы сделать намного быстрее, если бы можно было работать только с числовыми компонентами каждой строки поиска в реальной матрице, а не с массивами строк.

Другие вопросы по тегам