裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia 1.8.2 速い,Python 3.11.0 よりも

2022年11月05日 | Julia

Python 3.11.0 になって,Python が速くなって嬉しいって!!

> 自分のPCでも23.2秒から12.5秒になり、2倍ぐらい早くなってるのでこれはうれしい。

フィボナッチ数列を再帰関数により求める場合の話なので,一般的なものではないことをお断りしておく。

私のマシンで比較してみました。

結論を述べておきます。なんだかんだいっても,Python に比べて Julia は 28 倍くらい速い。

Python 3.11.0

Python 3.11.0 (v3.11.0:deaf509e8f, Oct 24 2022, 14:43:23) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def fb(n):
...     if n == 0 or n == 1:
...         return n
...     else:
...         return fb(n - 2) + fb(n - 1)
... 
>>> from time import time
>>> s = time();fb(40);print(time()-s)
102334155
11.548144340515137

ほどほど早い。(Python 3.10 で確かめようなんてつもりはさらさない)

R はどうか?

R version 4.2.2 RC (2022-10-27 r83209) -- "Innocent and Trusting"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: aarch64-apple-darwin20 (64-bit)

> fb = function(n) {
+  if (n < 2) {
+   return(n)
+  } else {
+   return(fb(n - 2) + fb(n - 1))
+  }
+ }
> system.time(print(fb(40)))
[1] 102334155
   user  system elapsed 
 64.022   0.394  64.373 

遅い!!!

でも,gmp ライブラリを使ってずるっこすると,測定限界以下の速度になります

> library(gmp)
> system.time(print(fibnum(40)))
Big Integer ('bigz') :
[1] 102334155
   user  system elapsed 
      0       0       0 

Julia は?

   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.8.2 (2022-09-29)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> function fib(n)
           if n < 2
               return n
           else
               return fib(n - 2) + fib(n - 1)
           end
       end;

julia> @time fib(40)
  0.405616 seconds
102334155

何の文句もない。速い(あたりまえなんだけど)

ちなみに,噛ませ犬で AWK

function fb(n) {
    if (n < 2) {
        return(n)
    }
    else  {
        return(fb(n - 2) + fb(n - 1))
    }
}

BEGIN {
    print fb(40)
}

というファイルを用意して

$ time awk -f fb.awk
102334155
37.665u 0.136s 0:37.81 99.9% 0+0k 0+0io 0pf+0w

意外にも R より速い

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村