Cell Array

Hello, is a simple question.
How can I remove repeated vectors from a cell array. Example:
Given a cell array {[1,2,3] [2,4] [1] [1,2,3] [5] [2,4] [1]}
I want the result:
{[1,2,3][2,4][1][5]} Thank you

Answers (3)

Wayne King
Wayne King on 24 Apr 2012
One way:
x = {[1,2,3] [2,4] [1] [1,2,3] [5] [2,4] [1]};
y = cellfun(@num2str,x,'uniformoutput',false);
xnew = unique(y);
xnew = cellfun(@str2num,xnew,'uniformoutput',false);
Andrei Bobrov
Andrei Bobrov on 24 Apr 2012
y = cellfun(@(y)[y,zeros(1,max(cellfun('size',x,2)) - numel(y))],x,'un',0);
y = cat(1,y{:});
[a,b] = unique(y,'rows','first');
[ii,ii] = sort(b);
out = x(b(ii));
EDITED
[a,n,n] = unique([x{:}])
nn = cellfun('size',x,2);
y = mat2cell(n,1,nn);
y = cellfun(@(y)[y,k*ones(1,max(nn) - numel(y))],y,'un',0);
y = cat(1,y{:});
[a,b] = unique(y,'rows','first')
[ii,ii] = sort(b);
out = x(b(ii));

2 Comments

Jan
Jan on 24 Apr 2012
Does this fail to process {[1], [1,0]}?
Andrei Bobrov
Andrei Bobrov on 24 Apr 2012
Hi Jan! Corrected.

Sign in to comment.

Jan
Jan on 24 Apr 2012
A dull FOR loop appraoch:
x = {[1,2,3] [2,4] [1] [1,2,3] [5] [2,4] [1]};
n = numel(x);
v = true(1, numel(x));
for i = 2:n
tmp = x{i};
for j = 1:i-1
if isequal(x{j}, tmp)
v(i) = false;
break; % Leave j loop
end
end
end
out = x(v);

Categories

Find more on Operators and Elementary Operations in Help Center and File Exchange

Asked:

on 24 Apr 2012

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!