How to group variables in a same cluster ?

if I have
A=[1 2; 2 4; 3 4; 4 1; 5 1; 6 4; 7 4; 8 2; 9 1; 10 1]
where 1st column represents customer ID and 2nd column shows Clustering Number. How can I group customer ID into a same cluster such as
cluster1=[4 5 9 10], cluster2=[1,8], cluster3=[ ], cluster4=[2,3,6,7]

 Accepted Answer

A=[1 2; 2 4; 3 4; 4 1; 5 1; 6 4; 7 4; 8 2; 9 1; 10 1]
id=unique(A(:,2))
for ii=1:length(id)
iid{ii}=A(find(A(:,2)==id(ii)),1)
end
you can see the outputs just by entering iid{1}

3 Comments

Never mind that this answer is incorrect (try it when the customer id is not equal to the row number such as A = [1234 1;4567 1]), find is usually unnecessary.
If you wanted to use a loop, the body of the loop should be:
for ii = 1 : numel(id)
iid{ii} = A(A(:, 2) == id(ii), 1)
end
Also, you should preallocate the cell array rather than growing it in the loop, wasting time reallocating a new cell array at each step. So before the loop:
iid = cell(numel(id), 1);
for ...
Or use accumarray which avoids all these issues...
edit: I see the answer has been edited to correct the bug so the answer now works. find is still unnecessary. It just slows the code for no benefit.
Sir, I am just a student. That was my mistake. Sorry for this.

It's fine. Don't worry. I'm a rookie also. It's not your fault. Let's share.

Sign in to comment.

More Answers (1)

Assuming your clustering numbers are all strictly positive integers:
accumarray(A(:, 2), A(:, 1), [], @(custs) {custs})

Tags

Community Treasure Hunt

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

Start Hunting!