背景
大量のセルの統計量を算出する場合,関数によって処理時間が大きく異なる場合がある。そこで,各種統計関数の処理時間を調べてみた。
検証環境
Excel 2013(64bit) + Windows 10 Pro(64bit)CPU: Core i7 2.4GHz
RAM: 16GB
仮想メモリ: OFF
検証方法
以下の手順で検証した。- 約100万行×50列(=約5000万個)の乱数列を作成する。ただし,再計算されないように,値は固定する。
- 5000万個のセルに対して,統計関数によって統計量を算出する。
- Application.CalculateFull を実行するのに要する時間を,timeGetTime関数を利用して計測する。
- 2.~3.を,各種関数ごとに実行,比較する。
- ただし,キャッシュの効果などもあるので,どの関数をテストするかの順序については無作為実験を行う。また,Excel再起動ごとに2セットずつ測定し,計10回ずつの実験を行う。
結果
結果は下図のとおり。誤差棒は10回の標準偏差。DEVSQ関数を除いては,計算内容から定性的に予想される結果とほぼ同じになった。
また,PERCENTILE.INC関数を使うと遅くなると感じていたのだが,それを裏付ける結果となった。
SUMSQとVAR.Sとの違いはあまりない。これに対し,DEVSQはVAR.Sと比較して大幅に遅い。理由は不明。定義上は,VAR.SとDEVSQの計算量は大して違わないはずであるが・・・。
0 件のコメント:
コメントを投稿