関数filter2,ordfilt2およびblockproc(この最後の関数を使用する可能性が最も高いです。2.0.0 より前のパッケージ バージョンでは blkproc と呼ばれていました) でループします。あなたのコードが何をしようとしているのかをよく見ていませんでしたが、それらのループが本当に必要な場合は非常に驚くでしょう. 異なるインデックスで単純な演算のみを行っているようです。コードをベクトル化する方法を学ぶと、大幅な改善が見られます。コードが何をしているのかを説明できれば、もっと役立つかもしれません。
また、 を使用する必要はありません。sum (sum (x))これらを に置き換えることができますsum (x(:))。またsum (x.^2)、 を使用する必要はありません。使用できますsumsq (x)。したがって、あなたの 4 つの関数呼び出しsqrt (sum (sum (curDiff.^2)))は に置き換えることができますsumsq (curDiff(:))。
以下を比較してください。
octave> x = rand (5000, 5000);
octave> t = cputime (); sqrt (sum (sum (x.^2))); cputime () - t
ans = 0.25202
octave> t = cputime (); sumsq (x(:)); cputime () - t
ans = 0.060004
はるかに短くて読みやすいだけでなく、4 倍も高速です (これは、あなたのような巨大なループでは大きな違いを生むでしょう)。