Dear all, This is a cross post of stackoverflow[0].
I am interfacing a C++ data intense library with Python by py++[1]/boost.python[2]. After profiling my program, I find 70% of run time is spent on code like this: ni = range(v2o.getHits()) tau = np.array([v2o.TofCorrectedTime[i] for i in ni]) q = np.array[v2o.getCharge()[i] for i in ni] v2o.TofCorrectedTime is typed __array_1_float_2368[3] from py++. v2o.getCharge() is typed _impl_details_range_iterator_[4] from py++, too. Size being about 2000, the convertion from these py++ array wrappers to numpy is slow: In [42]: timeit np.array(v2o.TofCorrectedTime) 100 loops, best of 3: 2.52 ms per loop In [43]: timeit np.array(v2o.getCharge()) 100 loops, best of 3: 4.94 ms per loop In [44]: timeit np.array([0]*2368) 1000 loops, best of 3: 310 µs per loop In [45]: timeit np.array(np.zeros(2368)) 100000 loops, best of 3: 4.41 µs per loop I searched the web for a solution. The candidates are: 1. Cython[5] with memoryview[6] 2. pyublas[7] 3. Boost.NumPy[8] Questions: - Is cython/memoryview easy to be integrated with boost.python and py++? I want to keep the rest of the library wrapper. - Which one best suites my problem in terms of convertion overhead? Thanks, Benda [0]: http://stackoverflow.com/questions/20376021/exchange-numpy-array-with-boost-python-pyublas-or-boost-numpy [1]: http://svn.code.sf.net/p/pygccxml/svn/pyplusplus_dev [2]: http://www.boost.org/libs/python [3]: http://svn.code.sf.net/p/pygccxml/svn/pyplusplus_dev/pyplusplus/code_repository/array_1.py [4]: http://svn.code.sf.net/p/pygccxml/svn/pyplusplus_dev/pyplusplus/code_repository/return_range.py [5]: http://cython.org [6]: http://docs.cython.org/src/userguide/memoryviews.html [7]: http://mathema.tician.de/software/pyublas/ [8]: https://github.com/ndarray/Boost.NumPy _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org https://mail.python.org/mailman/listinfo/cplusplus-sig