[Numpy-discussion] python numpy code many times slower than c++

Neal Becker ndbecker2 at gmail.com
Wed Jan 21 14:57:59 EST 2009


Ravi wrote:

> On Wednesday 21 January 2009 10:22:36 Neal Becker wrote:
>> > [http://mail.python.org/pipermail/cplusplus-sig/2008-
October/013825.html
>>
>> Thanks for reminding me about this!
>>
>> Do you have a current version of the code?  I grabbed the files from the
>> above message, but I see some additional subsequent messages with more
>> patches.
> 
> That is the latest publicly posted code. Since then, there is just one
> minor patch (attached) which enables use of row-major (c-contiguous)
> arrays.
> 
> This does *not* work with strided arrays which would be a fair bit of
> effort to support. Further, you will have to work with the numpy iterator
> interface, which, while well-designed, is a great illustration of the
> effort required to support OO programming in an non-OO language, and is
> pretty tedious to map to the ublas storage iterator interface. If you do
> implement it, I would very much like to take a look at it.
> 
> Regards,
> Ravi

It seems your code works fine for my usual style:

ublas::vector<T> func (numpy::array_from_py<T>::type const&)

But not for a function that modifies it arg in-place (& instead of const&):

void func (numpy::array_from_py<T>::type &)

This gives:
ArgumentError: Python argument types in
    test1.double(numpy.ndarray)
did not match C++ signature:
    double(boost::numeric::ublas::vector<std::complex<double>, 
numpy::detail::numpy_storage_array<std::complex<double> > > {lvalue})


My instinct is to ignore it, because I think I don't need it, but do you 
have a workaround?






More information about the NumPy-Discussion mailing list