MATLAB: Unique across multiple cells or arrays

cell arraycell arraysMATLABuniquevectorization

Let's say I got a bunch of arrays in a cell array that are not the same size:
a = {[1 2 2], [2 3 6 3], [4 3 5 6 7]}
I want to remove all dupplicates accross the cells. I want to remove things in a cell that are in the other cells as well as the dupplicates in each cells:
Example output:
b = {[1 2], [3 6], [4 5 7]}
I would like to have this vectorized. I can simply loop but this is very slow:
others = [];
for i = 1:length(a)
b{i} = setdiff(unique(a{i}), others);
others = [others, b{i}];
end
I'm thinking of putting it all into a single array to call unique:
b = unique([a{:}])
% now b = [1 2 3 4 5 6 7]
But I don't think there's anyway to put it back into its respective cells since the order is lost and I don't know where the limits are

Best Answer

>> a = {[1,2,2],[2,3,6,3],[4,3,5,6,7]};
>> [u,x] = unique([a{:}],'first'); % or 'last' to allocate to the last cell where value occurs.
>> [~,y] = sort(x);
>> n = cumsum([1,cellfun(@numel,a)]);
>> z = sum(bsxfun(@ge,x(y),n),2);
>> c = accumarray(z,u(y),[],@(m){m});
>> c{:}
ans =
1
2
ans =
3
6
ans =
4
5
7