2015-04-15 2 views
0

Моя матрица - 10000 x 2. Похоже, это:Matlab - отфильтровать идентичные записи ячейки

Энн Бет

Боб Пит

Sam Sam

Джен Тед

...

Есть много линий с одинаковыми именами в обеих колонках (например, Сэм). Мне нужны только строки с разными именами. Я думал о for-loop с использованием сравнения ismember/string, но это очень медленно, и есть некоторые такие матрицы. Другим вариантом, который также является медленным, является уникальный первый столбец и запуск цикла for с обнаружением уникальных значений и удалением каждый раз, когда значения find идентичны. Однако это тоже медленно. Пожалуйста, помогите оптимизировать. Благодаря

ответ

3

Вы можете использовать strcmp, чтобы получить логический массив индексов, соответствующий одинаковых строк, т.е. сравнивать 1-й столбец с 2 и удалять строки, соответствующие показателям 1.

Example: 

C = {'Ann' 'Beth'; 

'Bob' 'Pete'; 

'Sam' 'Sam'; 

'Jen' 'Ted'}; 

idx = strcmp(C(:,1),C(:,2)) 

Здесь idx выглядит следующим образом:

idx = 

    0 
    0 
    1 
    0 

Следовательно, 3-я строка содержит идентичные имена. Теперь удалите их:

C(idx,:) = []; 

C = 

    'Ann' 'Beth' 
    'Bob' 'Pete' 
    'Jen' 'Ted' 
Смежные вопросы