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开发者_JS百科 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>
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');
精彩评论