皆さんこんにちわ。
お元気ですか?私は眠いんです…。
本日も相変わらずBoost::pythonについて
特にPythonの科学技術計算ライブラリnumpyのarray型を扱ってみたいと思います。
C++
#include <Python.h> #include <numpy/arrayobject.h> #include <boost/python.hpp> #include <pyublas/numpy.hpp> using namespace std; using namespace boost; using namespace boost::python; pyublas::numpy_matrix<double> doubles(pyublas::numpy_matrix<double> x) { return 2*x; } pyublas::numpy_vector<double> triples(pyublas::numpy_vector<double> x) { return 3*x; } BOOST_PYTHON_MODULE(numpy_array){ def("doubles",&doubles); def("triples",&triples); }
1次元のarray型を扱う場合はnumpy_vector
2次元のarray型を扱う場合はnumpy_matrixを使う。
Python
>>> import numpy_array >>> import numpy >>> import pyublas >>> matrix = numpy.array([[2.1,4.0],[2.0,5.0]]) >>> vector = numpy.array([2.0,4.3,3.3]) >>> numpy_array.doubles(matrix) array([[ 4.2, 8. ], [ 4. , 10. ]]) >>> numpy_array.triples(vector) array([ 6. , 12.9, 9.9])
特筆すべき点は
import でpyublasを使っていること。
これがないと動きません。
更に君のコードは加速する。boostだけにね…。
(遂にboost::pythonネタはなくなった気がする…。要望があればそれについてやりたいと思います。できる範囲で)