how to vectorize nested for loops
Mostra commenti meno recenti
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
Risposte (2)
darova
il 10 Set 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 Commenti
Bob Thompson
il 10 Set 2019
cond = RepSol(1:s(1),1:s(2)) == RepSol((1:s(1))+m-1,(1:s(2))+n-1);
A couple of things:
RepSol(1:s(1),1:s(2))
This is just the entirety of RepSol, you shouldn't need to index it
RepSol((1:s(1))+m-1,(1:s(2))+n-1)
Your indexing here doesn't make sense. (1:s(1)) is just calling all rows, but then you're trying to adjust that range to +m-1. So, suppose you have ten rows, and you are looking at m = 5, then you are saying you want to look at rows 5:15, which isn't possible because you only have 10 rows.
Unfortunately, I don't have a way to solve your problem off the top of my head, but it might help us come up with a solution if you explain what you're trying to do with your loops. There might be a command which does it already.
darova
il 10 Set 2019
s(1) and s(2) are size of RepSol before repmat (two times less)
s=size(X);
RepSol=repmat(X,2,2);
AliHg
il 11 Set 2019
AliHg
il 17 Set 2019
0 voti
4 Commenti
darova
il 17 Set 2019
Can you tell something more about your problem? What are yuo working on now?
Maybe there is some solution
AliHg
il 17 Set 2019
darova
il 17 Set 2019
Unfortunately is explains nothing
The script does the follwoing if i understood correctly:
.png)
Rik
il 17 Set 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.
Categorie
Scopri di più su Mathematics in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!