みんな大好き,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倍以上速い。
※コメント投稿者のブログIDはブログ作成者のみに通知されます