日記帳...か?を継承し、より柔軟でパワフルなBlogに変身しました。RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。Cythonを使うほどのことはある?今日はB4向けのScilab講習があったんだけど、その例題の中に、Scilabのforと行列演算の比較があった。1年前ぐらいに話題にしたが、Scilabというのはいまどき純粋なインタプリタらしく、ループさせると構文解析まで繰り返すためか途端に遅くなる。Scilabでは速いとされるそれゆえに非効率に思えても無理やり行列演算で書いた方が早いという特徴を持っている。いうかScilabはともかく、売り物であるところのMATLABも似たようなものらしいし、それはいかんよなぁ。PythonやRubyではあらかじめコンパイルするから、forで極端に遅くなるようなことないはず。いう話をしていたら、PythonをCに変換することでさらなる高速化を実現する方法があるとのこと。うーん、確かに高速化できるだろうけど、そこまでして高速化するメリットってなによ。そんな疑問はあったものの、調べてみたら、どうもCythonというもののことを言っていたようだ。厳密にはCythonというのはPythonとは異なる言語らしいのだが、Pythonのコードはそのまま使えるようだ。Cythonを使うことで高速化するためのポイントは型指定を行うことらしい。動的な言語では変数の型が動かしてみるまでわからないので、ここにオーバーヘッドがかかってしまう。これはlong型とかわかってれば、それで高速なコードが生成できると、それがCythonを使うメリットらしい。どこでCythonを使うかというのは1つ問題である。基本的にはPythonのモジュールを作るために使われるものなのかなと思うんだけどね。Cに変換して、それをコンパイルというのは、それなりに時間のかかる処理だろうから、一回切りのプログラムでそれはもったいない。最初のコンパイルはあっさり、けど動作はそこまで速くないというのがLLだと思うんだよね。Cと同じぐらい早いよと言われても、そのために最初にかかる時間が増えてはどうしょうもないという意見もあるだろう。それでも計算時間が気になる場合には有効な方法と思うので、気になる人は調べて使ってみればいいと思う。ところで、PythonやRubyではforで極端に遅くなることはないと書いたが、実際にRubyで試してみた。s+=iends=(1..10000000).inject(:+)上と下で10回実行して所要時間を比較してみた。すると上の平均が4.21[s]、下の平均が2.94[s]、まぁこんなもんならforで極端に遅くなっているということはなさそうね。この2つで大きな差が出る環境はやっぱりおかしいんだ、とそういうことを改めて記して終わる。アーカイブを参照してください。Lab(07/03)バスの経路を切ったり貼ったり周旋屋のをとっつぁんの気ままな日記。Bad↓(07/23)安いのがウリの茨城空港つくば日記(03/07)プロフィールHidemaro(4303)検索キーワードこの検索は2008年5月18日以前の記事は検索できません。アーカイブを参照してください。コピーライトなどこのページではBlognPlusを使用しています有用なスクリプトの提供ありがとうございます。0.435886秒)。