SlideShare a Scribd company logo
1 of 23
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より一桁速い。

More Related Content

What's hot

WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたMITSUNARI Shigeo
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介MITSUNARI Shigeo
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)MITSUNARI Shigeo
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編Yosuke Onoue
 
mrubyのfiberを試してみた
mrubyのfiberを試してみたmrubyのfiberを試してみた
mrubyのfiberを試してみたKindai University
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)洋史 東平
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門Yosuke Onoue
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介MITSUNARI Shigeo
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementationMITSUNARI Shigeo
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…Yasumasa Suenaga
 

What's hot (20)

emcjp Item 42
emcjp Item 42emcjp Item 42
emcjp Item 42
 
llvm入門
llvm入門llvm入門
llvm入門
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
20140306 ibisml
20140306 ibisml20140306 ibisml
20140306 ibisml
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
 
optimal Ate pairing
optimal Ate pairingoptimal Ate pairing
optimal Ate pairing
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
 
mrubyのfiberを試してみた
mrubyのfiberを試してみたmrubyのfiberを試してみた
mrubyのfiberを試してみた
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 

Viewers also liked

Ruby vs python
Ruby vs pythonRuby vs python
Ruby vs pythonIgor Leroy
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsSolution4Future
 
Web backends development using Python
Web backends development using PythonWeb backends development using Python
Web backends development using PythonAyun Park
 

Viewers also liked (7)

python vs ruby
python vs rubypython vs ruby
python vs ruby
 
Ruby vs python
Ruby vs pythonRuby vs python
Ruby vs python
 
Flask vs. Django
Flask vs. DjangoFlask vs. Django
Flask vs. Django
 
Django vs Flask
Django vs FlaskDjango vs Flask
Django vs Flask
 
Framework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs ChaliceFramework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs Chalice
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutions
 
Web backends development using Python
Web backends development using PythonWeb backends development using Python
Web backends development using Python
 

Similar to Python vs ruby

phperを魅了するrubyの魅力(1)
phperを魅了するrubyの魅力(1)phperを魅了するrubyの魅力(1)
phperを魅了するrubyの魅力(1)tj-yoshino
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep LearningSatoshi imai
 
110828 tokyo scipy1_hido_dist
110828 tokyo scipy1_hido_dist110828 tokyo scipy1_hido_dist
110828 tokyo scipy1_hido_distShohei Hido
 
SSDとTokyoTyrantやMySQLの性能検証
SSDとTokyoTyrantやMySQLの性能検証SSDとTokyoTyrantやMySQLの性能検証
SSDとTokyoTyrantやMySQLの性能検証勲 國府田
 
ffi for rubyists
ffi for rubyistsffi for rubyists
ffi for rubyistsnanki
 

Similar to Python vs ruby (8)

Rの高速化
Rの高速化Rの高速化
Rの高速化
 
phperを魅了するrubyの魅力(1)
phperを魅了するrubyの魅力(1)phperを魅了するrubyの魅力(1)
phperを魅了するrubyの魅力(1)
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
110828 tokyo scipy1_hido_dist
110828 tokyo scipy1_hido_dist110828 tokyo scipy1_hido_dist
110828 tokyo scipy1_hido_dist
 
NumPy闇入門
NumPy闇入門NumPy闇入門
NumPy闇入門
 
SSDとTokyoTyrantやMySQLの性能検証
SSDとTokyoTyrantやMySQLの性能検証SSDとTokyoTyrantやMySQLの性能検証
SSDとTokyoTyrantやMySQLの性能検証
 
ffi for rubyists
ffi for rubyistsffi for rubyists
ffi for rubyists
 

Python vs ruby

  • 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. 1, i = i2  (intの代入) Python Ruby 実行結果:0.055(s) 実行結果:0.0095(s) 1回あたり:0.055(μs) 1回あたり:0.0095(μs) ・Rubyの方がPythonより一桁速いことに違和感があるが、計測方法を確認しても特に間違いは無さそうなの でバックエンドで何か異なる処理をしているのかもしれない。 。
  • 4. 2, i = i2+i3  (intの加算) Python Ruby 実行結果:0.11(s) 実行結果:0.015(s) 1回あたり:0.11(μs) 1回あたり:0.015(μs)
  • 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. 4,i=i2%i3 (intの剰余) Python Ruby 実行結果:0.13(s) 実行結果:0.028(s) 1回あたり:0.13(μs) 1回あたり:0.028(μs)
  • 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. 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. 7,f=f2/f3 (floatの除算) Python Ruby 実行結果:0.10(s) 実行結果:0.058(s) 1回あたり:0.10(μs) 1回あたり:0.058(μs)
  • 10. 8,f=f2%f3 (floatの剰余) Python Ruby 実行結果:0.12(s) 実行結果:0.059(s) 1回あたり:0.12(μs) 1回あたり:0.059(μs)
  • 11. 9,intからfloatへの変換 Python Ruby 実行結果:0.26(s) 実行結果:0.082(s) 1回あたり:0.26(μs) 1回あたり:0.082(μs)
  • 12. 10,floatからintへの変換 Python Ruby 実行結果:0.28(s) 実行結果:0.042(s) 1回あたり:0.28(μs) 1回あたり:0.042(μs) ・Rubyはintからfloatの半分のコストとなった。
  • 13. 11,listへの挿入(n=1,000) Python Ruby 実行結果:0.00062(s) 実行結果:0.00026(s) 1回あたり:0.62(μs) 1回あたり:0.26(μs)
  • 14. 12,listへの挿入(n=10,000) Python Ruby 実行結果:0.037(s) 実行結果:0.018(s) 1回あたり:3.7(μs) 1回あたり:1.8(μs)
  • 15. 13,listへの挿入(n=100,000) Python Ruby 実行結果:3.57(s) 実行結果:2.18(s) 1回あたり:35.7(μs) 1回あたり:21.8(μs)
  • 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. 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. 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. 17,Hashの生成(n=10,000) Python Ruby 実行結果:0.0014(s) 実行結果:0.0033(s) 1回あたり:0.14(μs) 1回あたり:0.33(μs) ・初めてPythonがRubyの性能を上回った。
  • 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. 19,正規表現のmatch Python Ruby 実行結果:0.002(s) 実行結果:0.0005(s) 1回あたり:2.0(μs) 1回あたり:0.5(μs) ・RubyがPythonより一桁速い。
  • 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. 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より一桁速い。