Is there a better way to perform a moving window of operations without using a for loop?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
razorfin
el 6 de Sept. de 2017
Comentada: John Chilleri
el 10 de Sept. de 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 comentarios
Respuesta aceptada
John Chilleri
el 6 de Sept. de 2017
Editada: John Chilleri
el 6 de Sept. de 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 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!