2014-01-09 2 views
1

Как вернуть только строки матрицы «A», которые не содержат некоторые значения (эти значения являются массив «B»)?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) 

Заранее спасибо за помощь

+0

Прямо с циклом 'for loop', проходящим через строки массива ячеек 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

Смежные вопросы