how to vectorize nested for loops
    3 views (last 30 days)
  
       Show older comments
    
Hello everyone
I want to vectorize the following code to reduce operation time. Can you guys help me out?
thanks 
% X is a double matrix
s=size(X);
RepSol=repmat(X,2,2);
% Y is a binary matrix
Y=repmat(Y,2,2);
% Preallocation
p=zeros(s);
for m=1:s(1)
    for n=1:s(2)
        for i=1:s(1)
            for j=1:s(2)
                if RepSol(i,j)==RepSol(m+i-1,n+j-1)
                    p(m,n)=p(m,n)+Y(i,j)*Y(m+i-1,n+j-1);
                end
            end
        end
    end
end
0 Comments
Answers (2)
  darova
      
      
 on 10 Sep 2019
        IS it correct?
for m=1:s(1)
    for n=1:s(2)
        cond = RepSol(1:s(1),1:s(2)) == RepSol((1:s(1))+m-1,(1:s(2))+n-1);
%         cond = X - RepSol((1:s(1))+m-1,(1:s(2))+n-1);
        P = Y(1:s(1),1:s(2)) .* Y((1:s(1))+m-1,(1:s(2))+n-1);
        res = cond .* P;
        p(m,n) = sum(res(:));                
    end
end
4 Comments
  AliHg
 on 17 Sep 2019
        4 Comments
  darova
      
      
 on 17 Sep 2019
				Unfortunately is explains nothing
The script does the follwoing if i understood correctly:
 
 .png)
  Rik
      
      
 on 17 Sep 2019
				I agree with darova that your explanation is minimal. Please edit your question, adding what you're trying to achieve. Maybe your problem can be solved with a well-chosen convolution, but with the current level of detail it is impossible to give you a better solution than you already have been given.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!