[SciPy-dev] Which matrix library in C++ for scipy

Neal Becker ndbecker2@gmail....
Thu Apr 26 07:58:11 CDT 2007


David Cournapeau wrote:

> Matthieu Brucher wrote:
>>
>>     scipy does certainly not depend on Boost. Blitz is used in weave,
>>     but I
>>     don't know if this is mandatory (and it includes the blitz
>>     library); I
>>     think that actually, a C++ compiler is not even mandatory. Maybe I am
>>     missing something, but why the need for a matrix library for basic
>>     neighbors algorithm ?
>>
>>
>> That's right, I do not have the utility for a fully-fludged matrix
>> library, but basic stuff yes. For a neighbooring algorithm, I can use
>> basic computations, norms, ...
>> Yes, I could program them directly, but if there is already something
>> in scipy, no use to do it again ;)
> I don't think there is anything like that in scipy. Something which
> could be useful would be to have a C++ class which reflects a numpy
> array, for seamless integration between eg boost.python and numpy. But
> that would be quite a challenge to get it right, I think.
> 
> David

There is numerical interface in boost::python.

I don't use this approach myself.  Here's why.  I write all basic algorithms
in c++.  I try to use modern, generic programming when writing them.

There is AFAIK, no reasonable way to interface such code to numerical/numpy. 
The C interface to numpy is too low-level.  IOW, I like writing in c++, and
I don't want to have to write code at such a low-level interface as would
be needed to interface to numpy.

So my approach is:

1. Write c++ algorithms with generic interfaces (where feasible).
2. When it is not feasible to use generic container types, I use
boost::ublas::{vector/matrix} explicitly.
3. The above c++ code is parametrized (templated) on the container types.
4. Explicit instantiations of (3) are then exposed to python, normally
specifying ublas::{vector/matrix} as the input/output types.

This doesn't, of course, directly interoperate with numpy.  I can, however,
convert between numpy arrays and ublas::matrix (which currently requires
copying the data, unfortunately).



More information about the Scipy-dev mailing list