how can i vectorize this loop?
11 次查看(过去 30 天)
显示 更早的评论
% x is a vector given in main program
function y = userfunction2(x,k)
x=y;
for i=i:k
y=userfunction(y);
end
采纳的回答
Walter Roberson
2017-11-12
See fold()
2 个评论
Walter Roberson
2017-11-12
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.
更多回答(1 个)
Akira Agata
2017-11-13
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!