Good morning, I have a matrix like this
ID =
10032 10033
10140 10141
10604 10607
10610 10611
10615 10626
11199 11201
11200 11203
11279 11365
11283 11380
11605 11606
11635 11972
1168 1169
11 382
11 505
11 617
11 761
11 975
975 1320
3000 617
And I want to get all the families for which a same shared number is available for example a family will contain all these couples:
family = [11 382;
11 505;
11 617;
11 761;
11 975;
975 1320;
3000 617]
Do you have any idea about how to cluster this data?
Thanks in advance!

답변 (2개)

KSSV
KSSV 2016년 9월 16일

0 개 추천

k = mode(ID(:,1)); % Gets most frequent number
idx = find(ID(:,1)==k) ; % get the indices where k=11 is
iwant = ID(idx,:)

댓글 수: 1

Piero Poli
Piero Poli 2016년 9월 16일
편집: Piero Poli 2016년 9월 16일
Thanks, however I would like to iterate this process to get all possible families. For examples some families will have just a couple of index (e.g. one line of ID). Any suggestions?
Also, you code is not finding the last two couples of the family one:
975 1320
3000 617
Thank you

댓글을 달려면 로그인하십시오.

Andrei Bobrov
Andrei Bobrov 2016년 9월 16일

0 개 추천

[a,~,c] = unique(ID);
out = ID(any(ismember(ID,a(accumarray(c,1) > 1)),2),:);

댓글 수: 2

Piero Poli
Piero Poli 2016년 9월 16일
Thank you Andrei, unfortunately this lines are not providing the output. I was looking for a way to come out with group of families all sharing at the same index, just as show in the family matrix in my question. At the end I would like to have N families.
Thank you
function cl = fun_for_piero(ID)
[a,~,c] = unique(ID);
ii = reshape(c,size(ID));
k = 1;
i1 = 1;
cl{k} = [];
c = 1:numel(a);
while ~isempty(ii)
t = any(ismember(ii,i1),2);
if ~any(t)
k = k + 1;
cl{k} = [];
i1 = c(1);
else
p = unique(ii(t,:));
cl{k} = [cl{k};sort(a(p(:)))];
ii = ii(~t,:);
c = setdiff(c,p);
i1 = p(:);
end
end

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Cluster Analysis and Anomaly Detection에 대해 자세히 알아보기

질문:

2016년 9월 16일

댓글:

2016년 9월 18일

Community Treasure Hunt

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

Start Hunting!

Translated by