Предполагая, что a
является массивом ячеек и что вы хотите найти уникальные строки из него на основе ячеек столбца 2
и 6
. Для того же можно предложить один подход, основанный на нескольких unique
использованиях, как показано ниже:
[~,~,ind1] = unique(cellfun(@num2str,a(:,2),'uni',0)) %//unique indices for col 2
[~,~,ind2] = unique(cellfun(@num2str,a(:,6),'uni',0)) %//unique indices for col 6
[~,ind]= unique([ind1 ind2],'rows','stable')%//unique row indices based on col2,6
a = a(ind,:)
Еще один способ сбрить один unique
-
col26 = cellfun(@num2str,[a(:,2) a(:,6)],'uni',0)
[~,~,unqind26] = unique(col26(:))
col26indexed = reshape(unqind26,size(col26))
[~,ind] = unique(col26indexed,'rows','stable')
a = a(ind,:)
Обратите внимание, что использование num2str
вместо unique
для массивов ячеек работает только с ячейками строк, поэтому их нужно было преобразовать в strings
.
Оба этих подхода будут работать с cell array
из numerals
или strings
или mix of them
(при условии, что [0]
и '0'
одинаковы), но если вы хотите иметь «уникальность» на основе их типов данных, тогда необходимо добавить больше кодов. там, и поскольку этот конкретный случай не упоминается в вопросе, он здесь не рассматривается.
Кроме того, я не думаю, что вам нужно использовать здесь strcat
, насколько я понял, прочитав текст вопроса.
person
Divakar
schedule
10.08.2014
a = unique(strcat(a(:,2), a(:, 6)),'rows');
но выдает ошибку (индекс превышает размеры матрицы) - person user3557054   schedule 10.08.2014a
? Пожалуйста, предоставьте (небольшой) воспроизводимый пример, отредактировав свой вопрос - person Luis Mendo   schedule 10.08.2014index exceeds matrix dimensions)
, вам нужно проверить, есть ли у вас согласованные данные в столбцах 2 и 6. - person Divakar   schedule 11.08.2014