Удалить строку и двойную избыточность в ячейке Matlab

У меня есть массив ячеек с двумя столбцами. Один состоит из строк, а другой из двойников. Я хотел бы удалить все строки, которые являются избыточными.

b = cell(4,2);
b{1,1} = 'a';
b{1,2} = 2;
b{2,1} = 'a';
b{2,2} = 1;
b{3,1} = 'b';
b{3,2} = 1;
b{4,1} = 'a';
b{4,2} = 2;

Так что в списке над строкой 2 будет удалена. И сортировка не помешала бы. Я нашел «уникальную» функцию, которая говорит мне, что она работает только для всех строковых ячеек. Есть ли другая функция для смешанных ячеек?

С уважением Мануэль Полезно Бесполезно


person Manuel    schedule 16.09.2015    source источник
comment
вы можете объединить свой двойник в строку, использовать уникальный, а затем снова разделить их, поскольку ваша строка не содержит чисел, это должно быть довольно легко сделать. Вы также можете выполнить сортировку, пока они объединены.   -  person GameOfThrows    schedule 16.09.2015
comment
Спасибо. я так сделал и все заработало   -  person Manuel    schedule 16.09.2015
comment
Подумайте о том, чтобы опубликовать ответ, чтобы люди с такой же проблемой нашли ответ!   -  person Ikaros    schedule 16.09.2015
comment
@ Мануэль, я предлагаю вам опубликовать свое собственное решение в качестве ответа, чтобы оно могло помочь другим людям в будущем.   -  person GameOfThrows    schedule 16.09.2015
comment
Я думаю, что на этом mathworks есть обмен файлами. .com/matlabcentral/fileexchange/   -  person patrik    schedule 16.09.2015


Ответы (1)


Это ответ благодаря помощи, которую я получил. Преобразуйте двойные числа в строки, объедините две строки, уникальные, снова разделите и преобразуйте строку в двойную:

b = cell(4,2);
b{1,1} = 'a';
b{1,2} = 2;
b{2,1} = 'a';
b{2,2} = 1;
b{3,1} = 'b';
b{3,2} = 1;
b{4,1} = 'a';
b{4,2} = 2;
b

btemp = {};
for i = 1:size(b)   
    [~,columns]=size(btemp);
    btemp{columns+1} = strcat(b{i,1},sprintf('%.3f',b{i,2}));
end
btemp = unique(btemp);
[~,columns]=size(btemp);

b2 = cell(columns,2);
for j = 1:columns
    b2{j,1} = btemp{j}(1);
    b2{j,2} = str2double(btemp{j}(2:end));
end

b2
person Manuel    schedule 16.09.2015