matlab - is it possible remove for loops from my code? -
i want remove nested loops code? can't remove them.
k = 3; data = rand(100,5); m = zeros(size(data)); n = size(data,2); % number of features m = size(data,1); % number of objects bound = zeros(n,k+1); max = max(data); min = min(data); ii = 1:n bound(ii,:) = linspace(min(ii), max(ii), k+1); end bound(:,end) = bound(:,end)+eps; tic; ii = 1:m jj=1:n kk=1:k if bound(jj,kk)<=data(ii,jj) && data(ii,jj)<bound(jj,kk+1) m(ii,jj) = kk; end end end end
you can away nesting upto limit.
at glance, jj
index seems uniform in operation within nested loop, can replace
for ii = 1:m jj=1:n kk=1:k if bound(jj,kk)<=data(ii,jj) && data(ii,jj)<bound(jj,kk+1) m(ii,jj) = kk; end end end end
by simply
for ii = 1:m kk=1:k m(ii,(bound(:,kk)<=data(ii,:)' & data(ii,:)'<bound(:,kk+1))) = kk; end end
this give exact same result before.
Comments
Post a Comment