how can i vectorize this loop?

11 ビュー (過去 30 日間)
William Brannon
William Brannon 2017 年 11 月 12 日
回答済み: Akira Agata 2017 年 11 月 13 日
% x is a vector given in main program
function y = userfunction2(x,k)
x=y;
for i=i:k
y=userfunction(y);
end
  5 件のコメント
William Brannon
William Brannon 2017 年 11 月 12 日
the original function works, but I am supposed to do it without a loop. LeftShift is okay with a loop,but the other one is supposed to shift it k times, which is entered by another user.
William Brannon
William Brannon 2017 年 11 月 12 日
What I really want is afunction that does this without a loop "k" times:
ShiftLeft(...(ShiftLeft(y)...)

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2017 年 11 月 12 日
See fold()
  2 件のコメント
William Brannon
William Brannon 2017 年 11 月 12 日
I'm sorry, but I don't understand how this works. What would the code actually look like?
I was thinking of vector operations to complete it, but I am not that familiar with how to use it in this case.
Walter Roberson
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
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 .

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by