How can i vectorize this loop?

Hi, I have to compute the stucture functions of velocity increments of a velocity sample (vector v) of size 1X13'000'000. My code is the following
for li = 1:20000
vl = v(1+li:end)-v(1:end-li);
S_2(li) = mean(vl.^2);
S_3(li) = mean(vl.^3);
S_4(li) = mean(vl.^4);
end
Is it possible to vectorize this loop to speed up computation ?
Thanks for your answers

3 Commenti

I don't know if you can vectorize that, since vl change size every iteration
You can still speed it up a bit by doing the following:
S_2 = nan(L,1);
S_3 = nan(L,1);
S_4 = nan(L,1);
for li = 1:L
vl = v(1+li:end)-v(1:end-li);
temp = vl.^2;
S_2(li) = mean(temp);
temp = temp .* vl;
S_3(li) = mean(temp);
temp = temp .* vl;
S_4(li) = mean(temp);
end
Rik
Rik il 24 Mag 2020
@William, feel free to move that to the answer section.
@Julien, I don't see a way to use a convolution or the mov___ functions, which generally would do something like this. What are you using this for? There might be a way to do a different calculation that gets you the downstream result. A change of algorithm will speed up your code much more than optimizing your code.
@William, Thank you it works better like this.
@Rik I have to compute it in a project about turbulence in a fluid flow at university, but the solution from William is already a good optimization.
Thanks to you two

Risposte (1)

@Rik told me to move my comment to the answer section, i hope he ment copy-paste :)
I don't know if you can vectorize that, since vl change size every iteration
You can still speed it up a bit by doing the following:
S_2 = nan(L,1);
S_3 = nan(L,1);
S_4 = nan(L,1);
for li = 1:L
vl = v(1+li:end)-v(1:end-li);
temp = vl.^2;
S_2(li) = mean(temp);
temp = temp .* vl;
S_3(li) = mean(temp);
temp = temp .* vl;
S_4(li) = mean(temp);
end

1 Commento

Rik
Rik il 25 Mag 2020
Yes, I did mean copy-pasting the contents of your comment. Actually moving posts between the answer and comment section has been on the wish-list for years now, so I doubt that will be possible any time soon.

Questa domanda è chiusa.

Prodotti

Release

R2018a

Richiesto:

il 24 Mag 2020

Chiuso:

il 20 Ago 2021

Community Treasure Hunt

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

Start Hunting!

Translated by