function [attAffinity] = CalcAttributesAffinity(data, attData, last_known_node, addMissingAtt, normalize, returnSparse) n = size(attData,1); numAtt = size(attData,2); if addMissingAtt> 0 && last_known_node < n attData = AddMissingNodesAttrFromNeighborsNeighbors(data, attData, last_known_node, addMissingAtt); end count = sum(attData,2); nnz_n = nnz(count); % fprintf('calculating attribtes affinity matrix - common start\n'); common = attData*attData'; [r,c,v] = find(common); clear('common'); x=size(r,1); LogMsg(sprintf('attAffinity common (%d) - nnz=%6.5d, %7.5d%%, max %d, min %d, mean %7.5d',numAtt,x,100*x/(n*n),max(v),min(v),mean(v))); LogMsg(sprintf('attAffinity count (%d) - nnz=%6.5d, %7.5d%%, max %d, min %d, mean %7.5d',numAtt,nnz_n, 100*nnz_n/n, max(count),min(count),mean(count))); fprintf('calculating attribtes affinity matrix \n'); % fprintf('calculating attribtes affinity matrix - loop start\n'); attAffinity = zeros(n,n); %% Sigal 13.3.13 - TODO use sparse if x < 50%??? for i=1:x total = count(r(i))+count(c(i))-v(i); if total > 0 attAffinity(r(i),c(i)) = v(i)/total; end end % [r,c,v] = find(attAffinity); % x=size(r,1); % LogMsg(sprintf('attAffinity final -> nnz=%d, %d%%, max %d, min %d, mean %d',x,100*x/(n*n),max(v),min(v),mean(v))); % [r,c,v] = find(attAffinity>=0.02); % x=size(r,1); % LogMsg(sprintf('attAffinity 0.02 - nnz=%d, %d%%, max %d, min %d, mean %d',x,100*x/(n*n),max(v),min(v),mean(v))); % [r,c,v] = find(attAffinity>=0.05); % x=size(r,1); % LogMsg(sprintf('attAffinity 0.05 - nnz=%d, %d%%, max %d, min %d, mean %d',x,100*x/(n*n),max(v),min(v),mean(v))); % LogMsg(sprintf('==> attAffinity - max %d, min %d, mean %d',max(max(attAffinity)),min(min(attAffinity)),mean(mean(attAffinity)))); % for i=1:n %% sigal 25.2.13 last_known_node % for j=1:i-1 % if common(i,j)>0 % total = count(i)+count(j)-common(i,j); % if total > 0 % attAffinity(i,j) = common(i,j)/total; % attAffinity(j,i) = attAffinity(i,j); % end % end % end % % for k=last_known_node+1:n % % attAffinity(i,k) = 1; % % attAffinity(k,i) = 1; % % end % end % fprintf('calculating attribtes affinity matrix - loop end\n'); % fprintf('calculating attribtes affinity matrix - normalize start\n'); % if normalize == 1 % maxValue = max(max(attAffinity)); % if maxValue>0 && maxValue ~= 1 % attAffinity = attAffinity ./ maxValue; % end % end % fprintf('calculating attribtes affinity matrix - normalize end max=%d\n',maxValue); % % for i = 1 : size(attAffinity,1) % attAffinity(i,i) = 1; % end % if returnSparse == 1 % attAffinity = sparse(attAffinity); % end fprintf('calculating attribtes affinity matrix - end function\n'); end %function