Python vs ruby

3,584 views

Published on

PythonとRubyの演算速度を比較してみた。Pythonの方が速いかなと思ってたけど、Rubyの方が概ね早い結果。計測方法がおかしいなど異論をお待ちしてますm(_ _)m

1 Comment
4 Likes
Statistics
Notes
  • Python最適化コード https://gist.github.com/3162056 私の環境はCPUだけ1.7GHz core i5でメモリとOSは同じ(4G, 10.7.4)です。slideの1つ目のコードの結果は以下の値でした。 Python-2.7.2: 0.057451 (s) Python-3.2.2: 0.036117 (s) 1つ目のPythonコードを書き換えて計測してみました。(1)グローバル変数アクセスを避ける、(2)rangeが一時的に1000000の配列をメモリに展開するのを避ける、(3) time.clock() のドットアクセスを避ける、ようにしています。チューニングしすぎない程度にRubyコード同等の書き方にしたつもりですが`、過不足はあるかも。このコードでの速度結果: Python-2.7.2: 0.007719 (s) Python-3.2.2: 0.002574 (s)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
3,584
On SlideShare
0
From Embeds
0
Number of Embeds
30
Actions
Shares
0
Downloads
0
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

Python vs ruby

  1. 1. Python vs Ruby演算コストの比較 @osamunmun
  2. 2. 環境・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つの値の平均を利用・空ループの実行結果を測定し除いた
  3. 3. 1, i = i2  (intの代入) Python Ruby 実行結果:0.055(s) 実行結果:0.0095(s) 1回あたり:0.055(μs) 1回あたり:0.0095(μs)・Rubyの方がPythonより一桁速いことに違和感があるが、計測方法を確認しても特に間違いは無さそうなのでバックエンドで何か異なる処理をしているのかもしれない。。
  4. 4. 2, i = i2+i3  (intの加算) Python Ruby実行結果:0.11(s) 実行結果:0.015(s)1回あたり:0.11(μs) 1回あたり:0.015(μs)
  5. 5. 3,i=i2/i3 (intの除算) Python Ruby 実行結果:0.12(s) 実行結果:0.028(s) 1回あたり:0.12(μs) 1回あたり:0.028(μs)・Pythonは乗算とほぼ同じコストに対して、Rubyは2倍近いコストになっている。
  6. 6. 4,i=i2%i3 (intの剰余) Python Ruby実行結果:0.13(s) 実行結果:0.028(s)1回あたり:0.13(μs) 1回あたり:0.028(μs)
  7. 7. 5,f=f2 (floatの代入) Python Ruby 実行結果:0.055(s) 実行結果:0.012(s) 1回あたり:0.055(μs) 1回あたり:0.012(μs)・Pythonはintの場合と同じコストであったが、Rubyは3割増となっている。
  8. 8. 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倍となっている。
  9. 9. 7,f=f2/f3 (floatの除算) Python Ruby実行結果:0.10(s) 実行結果:0.058(s)1回あたり:0.10(μs) 1回あたり:0.058(μs)
  10. 10. 8,f=f2%f3 (floatの剰余) Python Ruby実行結果:0.12(s) 実行結果:0.059(s)1回あたり:0.12(μs) 1回あたり:0.059(μs)
  11. 11. 9,intからfloatへの変換 Python Ruby実行結果:0.26(s) 実行結果:0.082(s)1回あたり:0.26(μs) 1回あたり:0.082(μs)
  12. 12. 10,floatからintへの変換 Python Ruby 実行結果:0.28(s) 実行結果:0.042(s) 1回あたり:0.28(μs) 1回あたり:0.042(μs)・Rubyはintからfloatの半分のコストとなった。
  13. 13. 11,listへの挿入(n=1,000) Python Ruby実行結果:0.00062(s) 実行結果:0.00026(s)1回あたり:0.62(μs) 1回あたり:0.26(μs)
  14. 14. 12,listへの挿入(n=10,000) Python Ruby実行結果:0.037(s) 実行結果:0.018(s)1回あたり:3.7(μs) 1回あたり:1.8(μs)
  15. 15. 13,listへの挿入(n=100,000) Python Ruby実行結果:3.57(s) 実行結果:2.18(s)1回あたり:35.7(μs) 1回あたり:21.8(μs)
  16. 16. 14,listの参照(n=1,000) Python Ruby 実行結果:0.0004(s) 実行結果:0.00005(s) 1回あたり:0.4(μs) 1回あたり:0.05(μs)・Rubyの性能がPythonを1桁上回った。速すぎる気がする。
  17. 17. 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と比べて劣化していない。
  18. 18. 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のアルゴリズムが異なることが伺える。
  19. 19. 17,Hashの生成(n=10,000) Python Ruby 実行結果:0.0014(s) 実行結果:0.0033(s) 1回あたり:0.14(μs) 1回あたり:0.33(μs)・初めてPythonがRubyの性能を上回った。
  20. 20. 18,Hashの参照(n=10,000) Python Ruby 実行結果:0.0008(s) 実行結果:0.0011(s) 1回あたり:0.08(μs) 1回あたり:0.11(μs)・PythonがRubyの性能を上回り、作成と比べた参照の性能値はどちらも同程度だった。
  21. 21. 19,正規表現のmatch Python Ruby 実行結果:0.002(s) 実行結果:0.0005(s) 1回あたり:2.0(μs) 1回あたり:0.5(μs)・RubyがPythonより一桁速い。
  22. 22. 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より一桁速い。
  23. 23. 21, ソート Python Rubyn=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より一桁速い。

×