0

コードを書き直して高速化する方法はありますか?

for i = 2:length(ECG)
    u(i) = max([a*abs(ECG(i)) b*u(i-1)]);
end;

私の問題は心電図の長さです。

4

2 に答える 2

2

uこのように事前に割り当てる必要があります

>> u = zeros(size(ECG));

またはおそらくこのように

>> u = NaN(size(ECG));

または多分このように

>> u = -Inf(size(ECG));

必要な動作に応じて。

ベクトルを事前に割り当てると、MATLAB はベクトルの大きさを認識し、適切なサイズのメモリ ブロックを予約します。

事前に割り当てない場合、MATLAB は最終的なベクトルがどのくらいの大きさになるかを知る方法がありません。最初に、メモリの短いブロックが割り当てられます。そのブロックのスペースが不足すると、どこかでより大きなメモリ ブロックを見つけて、すべての古い値を新しいメモリ ブロックにコピーする必要があります。これは、割り当てられたブロック内のスペースが不足するたびに発生します (配列を拡張するたびに発生するわけではありません。MATLAB ランタイムは、必要以上のメモリを要求するほどスマートである可能性が高いためです。必要)。この不必要な再割り当てとコピーには、長い時間がかかります。

于 2013-05-30T16:26:42.377 に答える