Is there a better way to perform a moving window of operations without using a for loop?
2 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
John Chilleri
2017 年 9 月 6 日
編集済み: John Chilleri
2017 年 9 月 6 日
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!
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!