MATLAB Answers

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

13 views (last 30 days)
razorfin on 6 Sep 2017
Commented: John Chilleri on 10 Sep 2017
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?
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

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!
##### 2 CommentsShowHide 1 older comment
John Chilleri on 10 Sep 2017
Glad I could help!

Sign in to comment.

### Community Treasure Hunt

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

Start Hunting!