Intersection of matrix rows up to a given column

1 view (last 30 days)
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))))

Accepted Answer

Walter Roberson
Walter Roberson on 12 Jul 2017
[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 Comments
Walter Roberson
Walter Roberson on 13 Jul 2017
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,:)."
MByk
MByk on 13 Jul 2017
Thank you this one is far too simple to interpret.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!