Boost の一部ながらも「実用的」すぎるため、とかくテンプレートメタプログラミングを愛好する諸兄から黙殺されてきた不幸のライブラリ、Boost.Python。Boost.勉強会でこいつの魅力を伝えようと思ったのだけど、時間の都合で無理だったので、簡単に紹介してみたい。 Boost.Python の基礎 Boost.Python は C++ のクラスや関数をラップする Python モジュールを恐ろしく簡単に書けるようにする、強力なライブラリである。 特に、Pyrex や Cython と比べて何がうれしいのかというと、 Python側にいちいちラッパ関数を書かなくてよい (テンプレートにより自動的に定義される) コンバータを登録することで、Python⇆C++の型の透過的な変換が容易にできる C++ のクラスを分かりやすい形で Python のクラスとして見せることが可能 といった点が挙
Boost.PythonとPyUblasに関して, 今まで適当に書いていた日記をまとめたもの. 詳細は過去の日記へのリンクをあちこちに貼ってある. 前書き Pythonは言わずと知れた非常に遅い言語だ. Pythonで大きなループを含む処理を書くことは即ち死を意味する. 例えば手元のthinkpad Core2Duo2.5GHzでは, Pythonで2つの500×500の行列同士の行列積を計算するのに29秒かかる. これは, C++では僅か0.6秒で終了することを考えると非常に遅い. (ただし, 乱数による行列の生成処理を含み, コンパイルオプションは-O2である) しかし世間は広く, この遅いPythonで数値解析をしたい奇特な人間がいるらしい. そこで恐らく今もっとも使われているライブラリがscipy(numpy)である. このscipyには様々な数値解析用の関数などが含まれている.
scipyで書いたプログラムでも一部が遅くてそこをC++で実装したいというシナリオはよくある. それには色々な手段があるというのは以前の日記でも紹介した通り. 今回はBoost.Pythonでscipy/numpyのarray(ndarray)を取り扱う方法を説明する. 基本的な使い方はboost-python ではじめる大規模機械学習とかBoost.Python の機能をざっと紹介してみるも参考になる. 簡単な使い方 さて本題へ. boost.Pythonにおいてnumpy.ndarrayに対応するクラスは, boost::python::numericである. これは Boost.Python には、Python と C++ の型の相互変換を行うためのコンバータという機構が備わっており、すべての値の受け渡しにはこのコンバータが介在している。 とあるように, numpy.ndarray
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く