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]

 Respuesta aceptada

ANKUR KUMAR
ANKUR KUMAR el 8 de En. de 2018
Editada: ANKUR KUMAR el 8 de En. de 2018
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 comentarios

Guillaume
Guillaume el 8 de En. de 2018
Editada: Guillaume el 8 de En. de 2018
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.
ANKUR KUMAR
ANKUR KUMAR el 8 de En. de 2018
Sir, I am just a student. That was my mistake. Sorry for this.
Pradya Panyainkaew
Pradya Panyainkaew el 8 de En. de 2018

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

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 8 de En. de 2018
Assuming your clustering numbers are all strictly positive integers:
accumarray(A(:, 2), A(:, 1), [], @(custs) {custs})

Categorías

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by