Yaleで、遊んで学ぶ日々。
Yaleで、遊んで学ぶ日々。
囲碁、ときどきプログラミング、ところにより経済。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
どうもスクリプトの走りが悪いので、Rの計算速度をチェックしてみることにした。
k * k の正方行列(正規分布) X を定義して、X' X を計算するという作業を、kの値を変えて行い、経過時間を調べる。Rではcrossprod関数を用いるか、t(X) %*% X という行列演算の2通りの方法がある。
下図は、横軸に行列のサイズ(k)を、縦軸に経過時間をプロットしたもの。黒がcrossprodを使った場合で、青は行列演算を使った場合。まず、相対的に見て、crossprodが圧倒的に早いことが目に付く。両者は全く同じ結果なので、行列演算は使わないほうがいいようだ。crosspordの方を見ると、2000*2000行列で5秒、3000*3000で17秒という結果だった。これ以降はちょっと時間が掛かりすぎるので止めた。
ただ、経過時間は結構正確に推計できる。上の図を、両対数を取った下の図を見てみると、ほぼ直線の関係になっていることが分かる。関係式を推計すると、
log(crossprod) = -18.83 + 2.69 log(size)
となる。例えば、サイズ6000を代入するとおよそ92秒と予測される。
Matlabと比べるとRの遅さに驚く。サイズ2000で0.7秒、サイズ3000で2.3秒、サイズ6000で19秒だ。ちなみに、こちらも両対数を取ると直線になるから(サイズが小さい範囲は誤差だろう)、多分似たようなアルゴリズムではあるのかもしれない。関係式を推計してみると
log(time) = -19.59 + 2.55 log(size)
となり、比較的推計値の値が近い。
k * k の正方行列(正規分布) X を定義して、X' X を計算するという作業を、kの値を変えて行い、経過時間を調べる。Rではcrossprod関数を用いるか、t(X) %*% X という行列演算の2通りの方法がある。
下図は、横軸に行列のサイズ(k)を、縦軸に経過時間をプロットしたもの。黒がcrossprodを使った場合で、青は行列演算を使った場合。まず、相対的に見て、crossprodが圧倒的に早いことが目に付く。両者は全く同じ結果なので、行列演算は使わないほうがいいようだ。crosspordの方を見ると、2000*2000行列で5秒、3000*3000で17秒という結果だった。これ以降はちょっと時間が掛かりすぎるので止めた。
ただ、経過時間は結構正確に推計できる。上の図を、両対数を取った下の図を見てみると、ほぼ直線の関係になっていることが分かる。関係式を推計すると、
log(crossprod) = -18.83 + 2.69 log(size)
となる。例えば、サイズ6000を代入するとおよそ92秒と予測される。
Matlabと比べるとRの遅さに驚く。サイズ2000で0.7秒、サイズ3000で2.3秒、サイズ6000で19秒だ。ちなみに、こちらも両対数を取ると直線になるから(サイズが小さい範囲は誤差だろう)、多分似たようなアルゴリズムではあるのかもしれない。関係式を推計してみると
log(time) = -19.59 + 2.55 log(size)
となり、比較的推計値の値が近い。
PR
素敵な料理動画の紹介 << | HOME | >> R: パッケージのバージョンを調べる |
Calender
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Search in This Blog
Latest Comments
[03/30 川内のばば山田]
[03/30 川内のばば山田]
[08/06 Aterarie]
[07/05 Agazoger]
[07/01 Thomaskina]
Latest Posts
(11/16)
(04/28)
(04/16)
(04/11)
(04/05)
Latest Trackbacks
Category
Access Analysis