Python vs Ruby
演算コストの比較




             @osamunmun
環境

・Mac OS X Version10.7.4
・CPU 2.2GHz Intel Core i7
・Memory 4GB
・Python 2.7.1 vs ruby 1.9.2p290
・実行測定結果は5回実行したうち、最大値、 最
小値を取り除いた3つの値の平均を利用
・空ループの実行結果を測定し除いた
1, i = i2  (intの代入)
          Python                          Ruby




 実行結果:0.055(s)                 実行結果:0.0095(s)
 1回あたり:0.055(μs)               1回あたり:0.0095(μs)


・Rubyの方がPythonより一桁速いことに違和感があるが、計測方法を確認しても特に間違いは無さそうなの
でバックエンドで何か異なる処理をしているのかもしれない。
。
2, i = i2+i3  (intの加算)
         Python                Ruby




実行結果:0.11(s)        実行結果:0.015(s)
1回あたり:0.11(μs)      1回あたり:0.015(μs)
3,i=i2/i3 (intの除算)
          Python                             Ruby




 実行結果:0.12(s)                    実行結果:0.028(s)
 1回あたり:0.12(μs)                  1回あたり:0.028(μs)


・Pythonは乗算とほぼ同じコストに対して、Rubyは2倍近いコストになっている。
4,i=i2%i3 (intの剰余)
         Python                 Ruby




実行結果:0.13(s)         実行結果:0.028(s)
1回あたり:0.13(μs)       1回あたり:0.028(μs)
5,f=f2 (floatの代入)
          Python                              Ruby




 実行結果:0.055(s)                     実行結果:0.012(s)
 1回あたり:0.055(μs)                   1回あたり:0.012(μs)


・Pythonはintの場合と同じコストであったが、Rubyは3割増となっている。
6,f=f2+f3 (floatの加算)
          Python                              Ruby




 実行結果:0.11(s)                        実行結果:0.059(s)
 1回あたり:0.11(μs)                      1回あたり:0.059(μs)


・Pythonはintの場合と同じコストであったが、Rubyは4倍となっている。
7,f=f2/f3 (floatの除算)
         Python                 Ruby




実行結果:0.10(s)           実行結果:0.058(s)
1回あたり:0.10(μs)         1回あたり:0.058(μs)
8,f=f2%f3 (floatの剰余)
         Python             Ruby




実行結果:0.12(s)       実行結果:0.059(s)
1回あたり:0.12(μs)     1回あたり:0.059(μs)
9,intからfloatへの変換
         Python             Ruby




実行結果:0.26(s)       実行結果:0.082(s)
1回あたり:0.26(μs)     1回あたり:0.082(μs)
10,floatからintへの変換
          Python                        Ruby




 実行結果:0.28(s)                  実行結果:0.042(s)
 1回あたり:0.28(μs)                1回あたり:0.042(μs)


・Rubyはintからfloatの半分のコストとなった。
11,listへの挿入(n=1,000)
          Python             Ruby




実行結果:0.00062(s)    実行結果:0.00026(s)
1回あたり:0.62(μs)     1回あたり:0.26(μs)
12,listへの挿入(n=10,000)
         Python            Ruby




実行結果:0.037(s)     実行結果:0.018(s)
1回あたり:3.7(μs)     1回あたり:1.8(μs)
13,listへの挿入(n=100,000)
         Python             Ruby




実行結果:3.57(s)       実行結果:2.18(s)
1回あたり:35.7(μs)     1回あたり:21.8(μs)
14,listの参照(n=1,000)
           Python                            Ruby




 実行結果:0.0004(s)                    実行結果:0.00005(s)
 1回あたり:0.4(μs)                     1回あたり:0.05(μs)


・Rubyの性能がPythonを1桁上回った。速すぎる気がする。
15,listの参照(n=10,000)
          Python                             Ruby




 実行結果:0.018(s)                      実行結果:0.0005(s)
 1回あたり:1.8(μs)                      1回あたり:0.05(μs)


・Rubyの1回あたりの性能がn=1000と比べて劣化していない。
16,listの参照(n=100,000)
          Python                            Ruby




 実行結果:2.2(s)                       実行結果:0.0044(s)
 1回あたり:22.2(μs)                    1回あたり:0.044(μs)


・Rubyの1回あたりの性能がn=1000と比べて劣化していない。Pythonは指数関数的にコストが
増加しており、listのアルゴリズムが異なることが伺える。
17,Hashの生成(n=10,000)
          Python                    Ruby




 実行結果:0.0014(s)            実行結果:0.0033(s)
 1回あたり:0.14(μs)            1回あたり:0.33(μs)


・初めてPythonがRubyの性能を上回った。
18,Hashの参照(n=10,000)
          Python                          Ruby




 実行結果:0.0008(s)                  実行結果:0.0011(s)
 1回あたり:0.08(μs)                  1回あたり:0.11(μs)


・PythonがRubyの性能を上回り、作成と比べた参照の性能値はどちらも同程度だった。
19,正規表現のmatch
          Python                Ruby




 実行結果:0.002(s)        実行結果:0.0005(s)
 1回あたり:2.0(μs)        1回あたり:0.5(μs)


・RubyがPythonより一桁速い。
20, 条件判定
          Python               Ruby




 数字=>実行結果:0.07(s)     数字=>実行結果:0.009(s)
     1回あたり:0.07(μs)       1回あたり:0.009(μs)
 文字=>実行結果:0.13(s)     文字=>実行結果:0.032(s)
     1回あたり:0.13(μs)       1回あたり:0.032(μs)


・RubyがPythonより一桁速い。
21, ソート
         Python                   Ruby




n=1000=>実行結果:0.025(s)   n=1000=>実行結果:0.0067(s)
     1回あたり:25(μs)               1回あたり:6.7(μs)
n=10000=>実行結果:2.44(s)   n=10000=>実行結果:0.59(s)
     1回あたり:244(μs)             1回あたり:59(μs)
n=100000=>実行結果:282(s)   n=100000=>実行結果:58(s)
     1回あたり:2820(μs)            1回あたり:580(μs)

・RubyがPythonより一桁速い。