裏 RjpWiki

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

R ユーザ,歓喜の涙 -- ケンドールの順位相関係数の計算が Python の倍速!

2021年12月19日 | ブログラミング

みんな大好き,Julia の速度自慢
https://blog.goo.ne.jp/r-de-r/e/35653aa771bcd15136f14dae7969e593

では触れなかったが,

みんな大好き,R と Python の速度比較
https://blog.goo.ne.jp/r-de-r/e/9d0ef78b17007c6de642983c368aaf20

で,R でのケンドールの順位相関係数の計算が遅すぎると書いた
これを解決できるパッケージを見つけたので報告する。

実験環境

macOS Monterey バージョン 12.1
Mac mini (M1, 2020)
チップ Apple M1
メモリ 8GB

R M1 チップ対応
version        4.2.0
platform       aarch64-apple-darwin21.1.0                        
arch           aarch64                                           
os             darwin21.1.0                                      
system         aarch64, darwin21.1.0                             

Python M1 チップ対応
Python 3.10.0

Julia M1 チップ対応
Version 1.7.0 (2021-11-30)

テストに使用するデータ

R で作った,10万件1500変数のデータフレームを csv ファイルとして保存。
これを各プログラムでデータフレームとして入力して各種関数の実行速度を測定する。

n = 100000
m = 1500
x = data.frame(round(matrix(rnorm(n*m, 50, 10), n, m), 2))
write.csv(x, file="test.csv", row.names=FALSE)
df = read.csv("test.csv", colClasses="numeric")})

まずは,R

> system.time({rk = cor(df[1:5], method="kendall")})
   user  system elapsed
327.977   0.465 328.402

探索していて見つけたライブラリ
https://rdrr.io/cran/pcaPP/man/cor.fk.html

library(pcaPP)
> system.time({fk = cor.fk(df[1:5])})
   user  system elapsed
  0.106   0.002   0.109

cor() より 3000倍速い

> system.time({fk = cor.fk(df[1:50])})
   user  system elapsed
 10.330   0.262  10.560

次いで, Python

>>> start = time(); rk = df.iloc[:, 0:5].corr(method='kendall'); print(time() - start)
0.2503321170806885

cor.fk より 2 倍以上遅い

>>> start = time(); rk = df.iloc[:, 0:50].corr(method='kendall'); print(time() - start)
26.7141010761261

最後に,Julia

@time rk = corkendall(Matrix(df[:, 1:5])) # 0.134137 seconds
@time rk = corkendall(Matrix(df[:, 1:50])) # 11.786005 seconds;

cor.fk() より若干遅いが,Python に比べて 2倍以上速い

 

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« R で,シグモイド関数を描画する | トップ | なんとかムーン »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事