裏 RjpWiki

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

みんな大好き,Julia の速度自慢

2021年01月25日 | ブログラミング

つい一月半位前に

みんな大好き,R と Python の速度比較

というのを書いた。そのときには,Julia なんて眼中になかったのだ。

そこで,Julia で同じことをやるとどんだけ〜〜速いかやってみた。

 

結論

Julia 速い。ただし,初回は若干時間が掛かる。

Python は ピアソンの積率相関係数行列,分散・共分散行列,重回帰分析で健闘している。

 

using CSV, DataFrames

test.csv は 100000行, 1500列のデータ

データ読み込み

@time df = CSV.read("test.csv", DataFrame)
#  23.113033 seconds (24.45 M allocations: 2.275 GiB, 3.44% gc time)
# R では,変数型を指定して 33.607, Pythonでは 28.793 だったので,かなり速いといえよう
# 以下では 単位は秒

単変量分析

@time a = mapcols(sum, df)  # 0.0777, R: 0.739, Pyhton: 5.416
using Statistics
@time a = mapcols(mean, df) # 0.0760, R: 0.662, Python:  5.352
@time a = mapcols(var, df)  # 0.123,  R: 0.552, Python:  8.466
@time a = mapcols(std, df)  # 0.125,  R: 0.561, Python: 11.574

2変量分析

ピアソンの積率相関係数
@time a = cor(df[:, 1], df[:, 2]) # 0.00106, R: 0.011, Python: 0.004

多変量回帰

ピアソンの積率相関係数行列
@time a = cor(Array{Float64,2}(df)) # 4.331, R: 100.509, Python: 360.236

スピアマンの順位相関係数行列
using StatsBase
function spearmancor(x::Array{Float64,2})
    rank = similar(x, Float64)
    for i = 1:size(x, 2)
        rank[:, i] = tiedrank(x[:, i])
    end
    return cor(rank)
end
@time a = spearmancor(Array{Float64,2}(df)) # 23.354, R: 140.892, Python 4238.496

分散・共分散行列
@time a = cov(Array{Float64,2}(df));  # 4.469, R: 106.829, Python: 4.987

重回帰分析
using GLM
@time a = lm(@formula(X1 ~ X2+X3+X4+X5+X6+X7+X8+X9+X10), df) # 0.0255, R: 0.163, Python 0.031

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 簡単なプログラミング問題を ... | トップ | Julia の変数スコープに注意 »
最新の画像もっと見る

コメントを投稿

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