英国でデータサイエンスを学ぶ

30代になってから海外で統計学・機械学習・プログラミングを勉強

MENU

R, Python, C++でプログラムの実行時間を計測

プログラムを書いていて実行時間を計測しないとどの程度スケーリングして良いのかわからないので、そのための備忘メモです。


[目次]


1. Rでproc.time()を用いて実行時間の計測

Rの場合は、proc.time()を用いて以下のようなコードで実行時間を計算できます。
単純な足し算をした時の経過時間を出力しています。

#開始時刻を計測
t0 <- proc.time()

#単純な足し算を実行
num <- 0
for(i in 0:10000000){
    num <- num + i/1000000000
}
print(num)

#終了時刻を計測
t1 <- proc.time()

#経過時間を出力
cat("elapsed time = ", (t1-t0)[3])

2. Pythonでtimeモジュールを用いて実行時間の計測

Pythonの場合は、timeモジュールを用いて以下のようなコードで実行時間を計算できます。
単純な足し算をした時の経過時間を出力しています。

#coding*utf-8
#timeモジュールをインポート
import time

#開始時刻を計測
t0 = time.time()

#単純な足し算を実行
num = 0
for i in range(10000001):
    num += i/1000000000;
print("num is ", num)

#終了時刻を計測
t1 = time.time()

#経過時間を出力
print("elapsed time = ", round(t1-t0,3), "sec")


3. C++でtimeライブラリーを用いて実行時間の計測

C++の場合は、timeライブラリーを用いて以下のようなコードで実行時間を計算できます。
単純な足し算をした時の経過時間を出力しています。

#include<iostream>
#include<time.h>

int main(){
    //開始時刻を計測
    clock_t t0 = 	clock();

    //単純な足し算を実行
    double num=0;
    for(int i=0; i<10000001; ++i){
        num += i/1000000000.0;
    }

    std::cout<<"num is "<<num<<std::endl;

    //終了時刻を計測
    clock_t t1 = clock();
    double elapsed_time = (t1-t0)/CLOCKS_PER_SEC;

    std::cout<<"elapsed time = "<<elapsed_time<<" sec "<<std::endl;

 return 0;
}


4. 結局、R, Python, C++のどれが早いのか?

今回のコードで実行すると圧倒的にC++が早いのですが、PythonやRでは代数計算をした方が計算時間は早くなるのでそのあたりの比較もいずれはできればと思っています。
当面は、面倒な計算はC++で、そうでもなさそうならばPython、Rで計算という感じですかね。