2015-01-22 3 views
0

в matlab Я создаю ячейку, которая содержит массивы разного размера. например:поиск в массиве ячеек в matlab

group{1} = [2;3;4]; 
group{2} = [4;5]; 
group{3} = [2;4;11;5;7]; 

Я собираюсь найти элемент и удалить его. если я ищу «4», то результат должен быть таким, как показано ниже:

group{1} = [2;3]; 
group{2} = [5]; 
group{3} = [2;11;5;7]; 

как я могу это сделать в Matlab? Я попробовал find, ismember, [group {:}].

ответ

4
  1. Вы можете использовать setdiff:

    remove = 4; %// may be a single value or a vector 
    group = cellfun(@(x) setdiff(x,remove,'stable'), group, 'UniformOutput', 0); 
    

    'stable' вариант в setdiff используется для сохранения оригинального порядка элементов.

  2. В качестве альтернативы, используйте ismember:

    remove = 4; %// may be a single value or a vector 
    group = cellfun(@(x) x(~ismember(x,remove)), group, 'UniformOutput', 0); 
    
  3. Возможно быстрее: если вы хотите, чтобы удалить одно значение, просто использовать индексацию:

    remove = 4; %// just one value 
    group = cellfun(@(x) x(x~=remove), group, 'UniformOutput', 0); 
    
+0

это работает замечательно. другой вопрос: как я могу получить доступ к индексу групп, которые содержат «remove». для этого примера {1} {2} {3} содержит 4. –

+0

Вам нужно немного изменить оператор 'cellfun'. Например, во втором подходе это будет 'indices = find (cellfun (@ (x) any (ismember (x, remove)), group))' –

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