how can i vectorize this loop?
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
William Brannon
am 12 Nov. 2017
Beantwortet: Akira Agata
am 13 Nov. 2017
% x is a vector given in main program
function y = userfunction2(x,k)
x=y;
for i=i:k
y=userfunction(y);
end
5 Kommentare
Akzeptierte Antwort
Walter Roberson
am 12 Nov. 2017
See fold()
2 Kommentare
Walter Roberson
am 12 Nov. 2017
ShiftLeftAux = @(V) {ShiftLeft(V)}
t = cell(1,k); t{1} = {y});
t2 = fold(ShiftLeftAux, t);
result = t2{1};
Not nearly as clean as I would like.
This does not really vectorize the loop, though: it merely hides the loop into fold(), the same as if you had just written a routine that did the operation multiple times.
If you want actual vectorization you should instead be using circshift().
There is no way in MATLAB to say "vectorize this arbitrary linear code": there are only ways to get it to apply the linear code without you writing a visible for loop. The results are typically slower than using a for loop.
Weitere Antworten (1)
Akira Agata
am 13 Nov. 2017
Seems that you would like to do circshift ?
Your 'y = ShiftLeft(x)' seems equivalent to 'y = circshift(x,1)', like:
x = 1:10;
y = circshift(x,1);
Then, y becomes
>> y
ans =
10 1 2 3 4 5 6 7 8 9
If you want to shift k times, you should simply do 'y = circshift(x,k)'. Please see more detail on circshift documentation page .
0 Kommentare
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!