2

Matlab から R に移植したコードがいくつかあります。それらのパフォーマンスを比較したいと思います。

system.time()ただし、 R で使用すると、同じコードに対して異なる結果が得られるという問題が発生しました。これは起こるはずですか?どうやって比較するの?

4

2 に答える 2

6

100mスプリントも自分で走ると違う結果が得られます!コンピューターでは、コードの実行にかかる時間がわずかに異なるさまざまな処理が行われています。

解決策は、コードを何度も実行することです。Rパッケージbenchmarkはあなたが探しているものです。

于 2012-04-06T19:15:23.833 に答える
0

@Justinが言ったように、時間は常に変化します。特に初めての数回は、ガベージコレクションシステムが特定の用途に合わせて調整されていないためです。測定する前にRを再起動することをお勧めします(そして他のプログラムを閉じ、システムがこの時点でウイルスをスキャンしていないことを確認してください)...

測定時間が短い場合(数分の1秒)、相対誤差がかなり大きくなるため、少なくとも1秒かかるように問題を調整してみてください。

パッケージbenchmarkまたはrbenchmarkが役立ちます。

...しかし、私は通常、問題の周りでforループを実行し、1秒ほどかかるまで調整します。その後、数回実行します。

次に例を示します。

f <- function(x, y) {
    sum <- 1
    for (i in seq_along(x)) sum <- x[[i]] + y[[i]] * sum
    sum
}

n <- 10000
x <- 1:n + 0.5
y <- -1:-n + 0.5
system.time(f(x,y)) # 0.02-0.03 secs 

system.time(for(i in 1:100) f(x,y)) # 1.56-1.59 secs

...したがって、100回呼び出すと、相対誤差が大幅に減少しました。

于 2012-04-06T20:20:17.470 に答える