Search code examples
performancematlabfor-loopcombinationssparse-matrix

Matlab get rid of loops


I'm a newbie in Matlab and trying get rid of Java/C++ customs.
The question is "how I can get rid of these for loops."
I tried to use nchoosek(n0,2) to get rid of one of the loops but another problem arose.(performance of nchoosek)

<Matlab code>
for j=2:n0
   for i=1:j-1
       %wij is the number of rows of A that have 1 at both column i and column j
       %summing col  i and j to find #of common 1's
       wij = length(find((A(:,i)+A(:,j))==2));
       %store it
       W(1,j)=wij;
         %testing whether the intersection of any two columns is too large
         if wij>= (1+epsilon)*u2;
         %create and edge between col i j
         end
   end
end
</matlab Code>

Solution

  • I assume that A is an array with only 0 and 1.

    Then you can create a nCol-by-nCol array B with the "distance" between colums by writing

    B = A'*A; %'# B(i,j) = length(find((A(:,i)+A(:,j))==2))
    
    %# threshold
    largeIntersection = B >= u2;
    
    %# find i,j of large intersections
    [largeIJ(:,1),largeIJ(:,2)] = find(largeIntersection);
    
    %# make sure we only get unique i,j pairs
    largeIJ = unique(sort(largeIJ,2),'rows');