Is there a better way to perform a moving window of operations without using a for loop?

4 views (last 30 days)
Say I have a matrix:
x=1:100;
And I want to create a new matrix y that has the following output:
[sqrt(1^2+4^2), sqrt(2^2+5^2), sqrt(3^2+6^2), ... etc.]
Note that each term in the output is y[index]=sqrt(x[index]^2+x[index+3]^2).
I could accomplish this with a for loop, but if matrix x is really large this is inefficient. Is there a more efficient way?

Accepted Answer

John Chilleri
John Chilleri on 6 Sep 2017
Edited: John Chilleri on 6 Sep 2017
Hello,
You can figure out a way to use vector notation,
x = 1:100;
y = sqrt(x(1:end-3).^2+x(4:end).^2);
I ran this vs the for loop version you have above, and this performed twice as fast when x = 1:1000000 and three times faster when x = 1:100000000. Although it didn't take long for either, I'd be more concerned for memory than speed - but that's only regarding this problem.
Hope this helps!

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!