Intersection of matrix rows up to a given column

How can I find the number of intersecting elements of a matrix up to a user defined column? For example, intersection of first 3 elements. This is what I tried, but it is not working. Thx for the help.
r=[1 2 3 4 5 6; 2 3 4 5 6 1; 1 5 6 3 2 4];
d=3;
dist=pdist(r,@(a,b)length(intersect(a(:,1:d),b(:,1:d))))

 Réponse acceptée

[A,B] = ndgrid(1:size(r,1),1:size(r,1));
dist = arrayfun(@(aidx,bidx)numel(intersect(r(aidx,1:d),r(bidx,1:d))), A, B);

5 commentaires

MB
MB le 13 Juil 2017
Modifié(e) : MB le 13 Juil 2017
Thx for the answer but this is not what I am looking for and I don't think it is working properly. For example if d and row count are equal to 3 result must be 2 1 0.
  • There will be 3 comparisons. "2" (1-2-3 and 2-3-4 "2" elements match), "1" (1-2-3 and 1-5-6 "1" element match) and "0" (2-3-4 and 1-5-6 no elements match).
r=[1 2 3 4 5 6; 2 3 4 5 6 1; 1 5 6 3 2 4];
d=3;
[A,B] = ndgrid(1:size(r,1),1:size(r,1));
temp = arrayfun(@(aidx,bidx)numel(intersect(r(aidx,1:d),r(bidx,1:d))), A, B);
dist = squareform(temp - diag(diag(temp)));
MB
MB le 13 Juil 2017
Modifié(e) : MB le 13 Juil 2017
Thx it is working perfectly fine much appreciated for your help but I wonder if it can be done by using "pdist" function because my code seems logical but it is not working.
dist=pdist(r,@(a,b) sum(ismember(b(:,1:d), a(:,1:d)),2))
"A distance function must be of form
d2 = distfun(XI,XJ)
taking as arguments a 1-by-n vector XI, corresponding to a single row of X, and an m2-by-n matrix XJ, corresponding to multiple rows of X. distfun must accept a matrix XJ with an arbitrary number of rows. distfun must return an m2-by-1 vector of distances d2, whose kth element is the distance between XI and XJ(k,:)."
MB
MB le 13 Juil 2017
Thank you this one is far too simple to interpret.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by