1

データの計算に使用されるアルゴリズムの効率を改善することにより、R でプログラムを高速化するのに役立つギグを取得しました。さまざまな計算を行う多くのループがあり、最終的にどのループが最も多くのリソースを使用するのか疑問に思っています。ループが完全に終了するまでの時間をカウントする方法を知りたいです。その情報を使用して、最適化するアルゴリズムを特定したり、計算を処理する C 拡張機能を作成したりすることさえできます。

4

3 に答える 3

2

私はRprofどこを見ればよいかを言うのに慣れています。スタック サンプルのファイルが生成されます。ランダムに選択された 10 個などの少数のサンプルを調べます。または、サンプル間の時間を十分に長くして、最初からサンプルが多すぎないようにします。

これが機能する理由は 2 つあります。

1) 個々のスタック サンプルを実際に自分の目で調べることで、単純な統計では明らかにならない問題を確認できます。スタックを見ることで、物事が行われている理由がわかるためです。それはあなたがそれを取り除くことができるかどうかを教えてくれます、そしてそれは重要な情報です.

2) 改善できるアクティビティのパターンが見られた場合は、複数のサンプルで見れば、修正する価値があることがわかります。追加のサンプルはすべて、(1) を実行できないことを意味する場合、実際には有害です。

于 2012-12-04T22:44:21.447 に答える
2

以下を使用できます。

  • Sys.time()またsystem.time()
  • rbenchmarkパッケージ_
  • microbenchmarkパッケージ_
  • またはプロファイラー (例?RProf)
于 2012-12-04T18:39:12.420 に答える
1

これは、 vs vsを使用して比較した別のSO質問からのベンチマークを使用した例です:コメントに従って編集tapplybydata.table

library(rbenchmark)  

           # Different tests being compared
benchmark( using.tapply = tapply(x[, 1], x[, "f"], mean),
           using.by = by(x[, 1], x[, "f"], mean), 
           using.dtable = dt[,mean(col1),by=key(dt)]), 

           # Number of reps. How results are.
           replications = 250, order = "relative"
          )   

#------------------------#
#         RESULTS        # 
#------------------------#


#   COMPARING data.table VS tapply VS by   #
#------------------------------------------#
#             test elapsed relative
#   2  using.dtable   0.168    1.000
#   1  using.tapply   2.396   14.262
#   3      using.by   8.566   50.988
于 2012-12-04T18:41:38.973 に答える