HAPPY2)では、1ステップで2.55秒もかかりました。ネットブックで解析を回すつもりは無いとはいえ、最低でも1万ステップくらい回すことを踏まえるとさすがに遅い。i3-4010U)でも0.63秒で4倍くらい速いものの、全然遅い。勉強用とはいえ、5000要素で1万ステップくらいは1分以内でやってほしい。1ステップで0.005秒くらいとなると、100倍以上の高速化が必要だ。Pythonが他のプログラムに比べても演算の処理速度が遅いことは知っていたので、最終段階で高速化しようと思っていたけども、現時点で、高速化しないと色々遊んでみることもままならなさそう・・・。いうことで、Cython化してみました。Pythonの高速化の手段はいろいろあって、今回ただの演算なので、Numpyとかの演算ライブラリを使うのが有用な手段だけども、プログラムの可読性が悪くなるので、Cythonに挑戦してみました。1ステップ1.82秒(1.40倍)ここまではCythonインストール以外の手間はほぼないので、うれしい高速化なのだけど、目指すところはその程度じゃない。ステップ3:クラスを全てcdef化してみる⇒上手くコーディングできないこの辺になってくると、Cythonの仕様を理解しなくちゃいけなくなってきました。条件設定や画面表示などは通常のPythonにしたい都合上、Pythonから見える見えない問題の解決が難しくて、Cython仕様に合わせて一から作ってみようと思いました。書ききれていないのだけど、形になってきたので、とりあえずどれだけ速くなりそうか見てみたい。ステップ4:Cythonで作り直し。1ステップ0.062秒(41倍)おおー。100倍とは行かないまでも、随分と速くなりました。いや、まぁプログラムを省略している部分が多いんだけど。体感的にはこんな感じ(ノートPC)元のPythonにおける要素データは、要素クラスのインスタンスをそのままリストに代入していく方式。プログラムがとても分かりやすくなるのだけど、Cythonでクラスインスタンスを配列に格納したりする方法が分からず、結局、構造体の配列にすることにしました。数値配列(行列)にしてしまうと可読性が悪くなってしまうし、それならば、Numpyなどのライブラリ使うほうが、速度的にも、利便的にも良くて、Cythonを使う意味がなくなっちゃうので。それに伴い、クラスは使わないように変更(オブジェクト指向は断念)。ちゃん動いているのかどうかの検証も、Python版では計算している処理もしてなかったりするので、ちゃんとした比較ではないけども、Pythonの書き方+ちょっとした知識だけで高速なモジュールが作れるのは、ありがたい。コメントをキャンセルメールアドレスが公開されることはありません。ブログ内容TibLab管理人TiBraのつぶやき程度の内容です。決まった趣旨はありません。興味を持ったこと・日常で行ったことを何でも書きます。共有価値がありそうな記事は昔からやっているTB-note(http://timiditybraver.blog71.fc2.com)に投稿します。