Main Content

timeit

関数の実行に必要な時間の測定

説明

t = timeit(f) は、関数ハンドル f によって指定された関数を実行するために必要な時間 (秒) を測定します。関数 timeit は、測定の信頼性を高めるために、指定された関数を複数回呼び出し、測定の中央値を返します。関数の実行が高速であれば、timeit は関数を複数回呼び出すことがあります。

t = timeit(f,numOutputs) は、必要な出力数 numOutputs と共に f を呼び出します。既定では、timeit は関数 f を呼び出し、出力を 1 つ返します (または関数が出力を返さない場合は、出力を返しません)。

すべて折りたたむ

timeit を使用して、date に対する関数呼び出しの時間を測定します。この例では、入力を受け付けない関数へのハンドルを使用します。

f = @date;
t = timeit(f)
t = 
1.4457e-05

複数の数学的行列演算 (行列の転置、要素ごとの乗算、列の和) の組み合わせの時刻を設定します。

A = rand(12000,400);
B = rand(400,12000);
f = @() sum(A.'.*B, 1);
timeit(f)
ans = 
0.0119

1 つの出力引数 s = svd(X) をもつ svd の実行にかかる時間を求めます。

X = rand(100);
f = @() svd(X);
t1 = timeit(f)
t1 = 
0.0012

svd の結果を、3 つの出力引数 [U,S,V] = svd(X) の場合と比較します。

t2 = timeit(f,3)
t2 = 
0.0033

入れ子ループを使用して、行列を割り当てる短い関数を作成します。入れ子ループを使用した配列の事前割り当ては効率的ではありませんが、ここでは説明をわかりやすくするために示します。

function mArr = preAllocFcn(x,y)
for m = 1:x
    for n = 1:y
        mArr(m,n) = 0;
    end
end
end

入れ子ループを使用した場合と、関数 zeros を使用した場合で、行列にゼロを割り当てる時間を比較します。

x = 1000;
y = 500;
g = @() preAllocFcn(x,y);
h = @() zeros(x,y);
diffRunTime = timeit(g)-timeit(h)
diffRunTime =

    0.1584

入力引数

すべて折りたたむ

測定対象の関数。関数ハンドルとして指定します。f は、入力を取らない関数に対するハンドルまたは空の引数リストをもつ無名関数に対するハンドルのいずれかです。

f からの必要な出力数。整数として指定します。f によって指定された関数の出力数が可変の場合、numOutputs はどの構文で timeit が関数の呼び出しに使用されるかを指定します。たとえば、関数 svd は、単一の出力 s または 3 つの出力 [U,S,V] を返します。numOutputs1 に設定すると、s = svd(X) 構文の実行時間が測定され、3 に設定すると、[U,S,V] = svd(X) 構文の実行時間が測定されます。

ヒント

  • 次の操作を実行すると、予期せぬ出力が発生します。

    • tictoc 間での timeit の使用
    • tictoc への呼び出しを含む関数の時刻設定における timeit の使用
    • timeit の再帰的な使用

拡張機能

バージョン履歴

R2013b で導入