Yaleで、遊んで学ぶ日々。
Yaleで、遊んで学ぶ日々。
囲碁、ときどきプログラミング、ところにより経済。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
以前、RをCと連携させることで、特にループ処理の速度を改善させることができることを書いた(記事へのリンク)。しかし、やっぱりCは難しい。さらに、RからCへ渡すことのできる引数の型に制限があるなど、書き方の工夫もそれなりに手強い。
そこで、手っ取り早くループ処理の速度を改善する方法として、pythonと連携させてはどうかと考え、やってみた。pythonとの連携については特別なメソッドが用意されているというわけではない。以下の手順で、強引に連携させる。
1. 特定の計算を行うpythonのスクリプトを書き、結果はファイルに出力させる。
2. Rにおいて、system() 関数を使ってそのpythonスクリプトを走らせ、結果をファイルから読み取る。
system() 関数は、外部プログラムを呼び出すための関数で、引数としてコマンド(文字列)を受け取る。例えば、
system("ls")
とすれば、作業中のディレクトリのファイルリストを出力する(windowsなら system("dir") だろうか)。
したがって、
system("python file.py arg1 arg2")
とすれば、R上からpythonスクリプトを走らせることができる。もちろん好きなだけ引数を渡すことができる。ただし、戻り値を受け取ることはできないので、結果の受け渡しにはファイルを経由する。人に仕事頼むのだが事情があって結果を直接会って話すことができないのに似ている。結果を記したメモを壁に貼っておいてもらうのだ。
処理内容は以前と同じくN*N回の加減の計算。R, Cと連携, pythonと連携の3パターンの計算速度を比較する。
処理に用いたファイル一式はこちら。
下のグラフでは、横軸にNを、縦軸に処理にかかる時間をプロットしている(両対数軸)。やはりCとの連携が圧倒的に速い。pythonも健闘していて、Rにやらせるよりはかなり速い。
具体的には、N=10000の場合(つまり、1億回の計算)、R では145秒かかるところを、pythonでは15秒、Cではなんと0.1秒未満で終わらせている。
回帰分析の結果:
* C *
log(time) = -20.30163 + 1.93688 * log(N)
* python *
log(time) = -14.66641 + 1.88273 * log(N)
* R *
log(time) = -13.99015 + 2.06207 * log(N)
Wald testを行うと、切片についてはすべての組み合わせについて、「等しい」という仮説は5%の有意水準で棄却された(Rとpythonの差はp値0.04くらいで、ぎりぎりだが)。
傾きについては、pythonとCの間には有意な差は見られなかった(p=0.156)。
一方、Rと比較したとき、python, Cはそれぞれ傾きが有意に小さい(それぞれp=0.002, 0.000)。
結論:Cほどではないがpythonとの連携もループ処理の速度改善に役立つ。
そこで、手っ取り早くループ処理の速度を改善する方法として、pythonと連携させてはどうかと考え、やってみた。pythonとの連携については特別なメソッドが用意されているというわけではない。以下の手順で、強引に連携させる。
1. 特定の計算を行うpythonのスクリプトを書き、結果はファイルに出力させる。
2. Rにおいて、system() 関数を使ってそのpythonスクリプトを走らせ、結果をファイルから読み取る。
system() 関数は、外部プログラムを呼び出すための関数で、引数としてコマンド(文字列)を受け取る。例えば、
system("ls")
とすれば、作業中のディレクトリのファイルリストを出力する(windowsなら system("dir") だろうか)。
したがって、
system("python file.py arg1 arg2")
とすれば、R上からpythonスクリプトを走らせることができる。もちろん好きなだけ引数を渡すことができる。ただし、戻り値を受け取ることはできないので、結果の受け渡しにはファイルを経由する。人に仕事頼むのだが事情があって結果を直接会って話すことができないのに似ている。結果を記したメモを壁に貼っておいてもらうのだ。
処理内容は以前と同じくN*N回の加減の計算。R, Cと連携, pythonと連携の3パターンの計算速度を比較する。
処理に用いたファイル一式はこちら。
下のグラフでは、横軸にNを、縦軸に処理にかかる時間をプロットしている(両対数軸)。やはりCとの連携が圧倒的に速い。pythonも健闘していて、Rにやらせるよりはかなり速い。
具体的には、N=10000の場合(つまり、1億回の計算)、R では145秒かかるところを、pythonでは15秒、Cではなんと0.1秒未満で終わらせている。
回帰分析の結果:
* C *
log(time) = -20.30163 + 1.93688 * log(N)
* python *
log(time) = -14.66641 + 1.88273 * log(N)
* R *
log(time) = -13.99015 + 2.06207 * log(N)
Wald testを行うと、切片についてはすべての組み合わせについて、「等しい」という仮説は5%の有意水準で棄却された(Rとpythonの差はp値0.04くらいで、ぎりぎりだが)。
一方、Rと比較したとき、python, Cはそれぞれ傾きが有意に小さい(それぞれp=0.002, 0.000)。
結論:Cほどではないがpythonとの連携もループ処理の速度改善に役立つ。
Ubuntuを11.10に更新したところ、QuarryがSGFファイルのデフォルトアプリじゃなくなってしまった。ファイルをダブルクリックするとGeditで開かれてしまうようになったのだ。
普通。デフォルトアプリの変更は、ファイルを右クリック→Prpperty→Open With から行うことができるが、Quarryもmugoもアプリケーションリストに含まれていなかったので、弱ってしまった。
調べてみたら、同じ悩みを持った人がいたらしく、コマンドラインから解決する方法が見つかった。ソース
xdg-mime query default application/x-go-sgf
で、現状のデフォルトアプリが何かがわかる。
xdg-mime default /usr/share/applications/Quarry.desktop application/x-go-sgf
で、Quarryをデフォルトアプリに設定できる。.desktopはなぜかは知らないけど必要らしい。
普通。デフォルトアプリの変更は、ファイルを右クリック→Prpperty→Open With から行うことができるが、Quarryもmugoもアプリケーションリストに含まれていなかったので、弱ってしまった。
調べてみたら、同じ悩みを持った人がいたらしく、コマンドラインから解決する方法が見つかった。ソース
xdg-mime query default application/x-go-sgf
で、現状のデフォルトアプリが何かがわかる。
xdg-mime default /usr/share/applications/Quarry.desktop application/x-go-sgf
で、Quarryをデフォルトアプリに設定できる。.desktopはなぜかは知らないけど必要らしい。
棋譜の閲覧・編集を行うソフトウェアの中で、最も優秀なのはMultiGoだろう。特に、棋譜を画像変換する機能が強い。コウ争いや、抜き後に打ち欠く場合など、すでに石の置かれた地点に再び着手があるときには、その旨を盤外に記述することになるが、MultiGoはそれを自動的に処理してくれる優れモノだ。
三村九段もブログ記事を書くときに使っているようだ。
残念ながら、MultiGoはWindows用なので、Linuxでは他を当たらなくてはいけない。
MugoはMultiGoのクローンのようなソフト。上で触れたような画像変換機能ではMultiGoに劣るが、逆にそれ以外の機能については遜色がない。インストールは、公式ページからdebファイルをダウンロードして開けば良い。
Quarryは、Ubuntuのソフトウェアセンターから手に入る。GNU Goを同時にダウンロードして、コンピュータと対局することもできる。オセロもできる。画像変換機能はついていないが、棋譜の閲覧に関しては操作性が抜群に良いので気に入っている。
三村九段もブログ記事を書くときに使っているようだ。
残念ながら、MultiGoはWindows用なので、Linuxでは他を当たらなくてはいけない。
MugoはMultiGoのクローンのようなソフト。上で触れたような画像変換機能ではMultiGoに劣るが、逆にそれ以外の機能については遜色がない。インストールは、公式ページからdebファイルをダウンロードして開けば良い。
Quarryは、Ubuntuのソフトウェアセンターから手に入る。GNU Goを同時にダウンロードして、コンピュータと対局することもできる。オセロもできる。画像変換機能はついていないが、棋譜の閲覧に関しては操作性が抜群に良いので気に入っている。
Calender
12 | 2025/01 | 02 |
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 | 31 |
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