情報科学と人工知能のノート

初等的な知識から最新論文の解説まで色々集めていきます.備忘録兼用.

R と MATLAB の実行時間計測

乗り換えを検討するために R と MATLAB で単純な処理の実行時間を計測してみました。

なお、以下の実験ではそもそもソフトウェアを動かしているマシンが違います。
自宅PC の R と大学PC の MATLAB と自分にとってどっちが都合がいいかを計っただけです(どこかに書いておかないと忘れますので虚空に向かって載せてるだけです)。
よって、以下の結果から一般的にどっちがどうと言えるものではありませんのでご注意ください。
でも MATLAB 走らせてるマシンの方がハヤイはずなんですけどねー。

R

> times <- rep(0, times=20)
> for (i in 1:20) {
+ t <- proc.time()
+ for (j in 1:100)
+ diag(1000) * diag(1000)
+ times[i] <- as.vector((proc.time() - t)[3])
+ }
> times
[1] 2.607 2.596 2.644 2.625 2.677 2.677 2.603 2.612 2.659 2.659 2.603 2.608
[13] 2.598 2.598 2.595 2.594 2.596 2.619 2.628 2.679

MATLAB

>> for i = 1:20 tic(); for j = 1:100 eye(1000) * eye(1000); end; toc(); end
Elapsed time is 4.100130 seconds.
Elapsed time is 4.216998 seconds.
Elapsed time is 4.228933 seconds.
Elapsed time is 2.800470 seconds.
Elapsed time is 2.593125 seconds.
Elapsed time is 2.561670 seconds.
Elapsed time is 2.556924 seconds.
% 中略
Elapsed time is 2.626316 seconds.
Elapsed time is 2.570071 seconds.
Elapsed time is 2.614598 seconds.
Elapsed time is 2.581647 seconds.

とりあえずこれだけ見る分には R のままで良さそうです。
もっと複雑な処理だと値渡しが云々といったことなどが聞いてくるんでしょうかね。

余談ですが、昨日 Revolution R の導入を試してみたところ途中でこけてしまいました。
インストールできました。
ちなみに、うちの環境は Mac OS X 10.6 で、configure が FORTRAN がどうこうで止まっていたのですが、MacPorts から g95 を入れたら通りました。
で結果はこれ。

> times <- rep(0, times=20)
> for (i in 1:20) {
+ t <- proc.time()
+ for (j in 1:100)
+ diag(1000) * diag(1000)
+ times[i] <- as.vector((proc.time() - t)[3])
+ }
> times
[1] 6.400 6.277 6.290 6.416 6.627 6.608 6.619 6.571 6.499 6.580 6.633 6.623
[13] 6.599 6.476 6.450 6.481 6.501 6.463 6.623 6.591

あれ?

大学マシンに R が入ってたのでついでに。

> times <- rep(0, times=20)
> for (i in 1:20) {
+ t <- proc.time()
+ for (j in 1:100)
+ diag(1000) * diag(1000)
+ times[i] <- as.vector((proc.time() - t)[3])
+ }
> times
[1] 5.425 6.004 6.634 6.683 6.655 6.681 6.656 6.680 6.655 6.703 6.666 6.682
[13] 6.645 6.672 6.689 6.625 6.671 6.644 6.672 6.642

んんんん??
計り間違いではないはずなのですが。

更に別の、自宅のより良い Mac Book Pro。

> times <- rep(0, times=20)
> for (i in 1:20) {

  1. t <- proc.time()
  2. for (j in 1:100)
  3. diag(1000) * diag(1000)
  4. times[i] <- as.vector((proc.time() - t)[3])
  5. }

> times
[1] 0.949 0.849 0.848 0.864 0.836 0.808 0.823 0.821 0.821 0.821 0.808 0.822
[13] 0.826 0.821 0.822 0.810 0.821 0.821 0.819 0.822