私はfor
ループのすべてのn個の反復が、私は常にこれらの線に沿って何かやる変数の値を表示する必要がある場合:ディスプレイは、変数値それぞれのn回の反復
for ii=1:1000
if mod(ii,100)==0
display(num2str(ii))
end
end
私がある場合は思っていたがコードを高速化するためにループ外に条件を移動する方法。それとももし私ができることが違っていたら。
私はfor
ループのすべてのn個の反復が、私は常にこれらの線に沿って何かやる変数の値を表示する必要がある場合:ディスプレイは、変数値それぞれのn回の反復
for ii=1:1000
if mod(ii,100)==0
display(num2str(ii))
end
end
私がある場合は思っていたがコードを高速化するためにループ外に条件を移動する方法。それとももし私ができることが違っていたら。
あなたはネストされたループを使用することができます。
(必要な場合)thingsToDo()
は、関連するカウンタを取得
N = 1000;
n = 100;
for ii = n:n:N
for k = ii-n+1:ii-1
thingsToDo(k);
end
disp(ii)
thingsToDo(ii);
end
。これはもう少し乱雑ですが、if
テストをたくさん節約できます。
cool!私はこれに決して考えなかった。しかし、あなたのコードを試してみました( 'thingsToDo(k)'のコメント後)、0.005532秒で実行されました。私のコードは0.003336秒で実行されました。私はなぜか分からない。最初の視点で私はあなたのソリューションが速かったと思った – shamalaia
私のコードは 'num2str'ranを0.004852秒で使用しています – shamalaia
@shamalaia私はそれを試してみましたが、これを100回実行したところ、0.3msでかなり速くなりました= 0.006ですが、これは実際の有効な統計検定ではありません)。コードを変更する価値があるかどうかは分かりませんが、ループの繰り返し回数によって異なります。 – EBH
テストされた値の数が印刷された値の数よりはるかに多い場合を除き、if文を責めません。最初はこのようには見えないかもしれませんが、印刷は実際にはかなり複雑な作業です。変数を変換して出力ストリームに送る必要があります。出力ストリームは端末で印刷されます。コードを高速化する必要がある場合は、印刷データの量を減らしてください。
通常、Matlab関数はベクトル入力も受け取ります。これはdisp
とdisplay
の場合であり、単一の関数呼び出ししか行いません。さらに、文字列への変換は印刷前には不要です。 Matlabはデータを何らかのストリームに送信する必要があります(実際にはchar
という引数を取るかもしれませんが、これはMatlabと同じ文字ではありません)。これはたぶん時間の無駄です。それに加えて、num2str
はタイプセーフな変換を確実にするために多くのことを行います。あなたはすでにdisplay
が型保証されていることを知っているので、これらのチェックはすべて冗長です。
これは代わりに試してみてください、あなたは文字列に最初にそれを変換せず、(ⅱ) ``だけ表示を使用していないのはなぜ
q = (1:1000)'; % assuming q is some real data in your case
disp(q(mod(q,100)==0)) % this requires a single call to disp
?これにより、時間が節約される場合があります – EBH
私は通常、出力が 'ii = \ n ii' – shamalaia
の形式にならないようにするために' disp(ii) ' – EBH