[Numpy-discussion] (newbie) How can I use NumPy to wrap my C++ class with 2-dimensional arrays?

Raymond de Vries reedev@zonnet...
Thu Jul 30 04:07:16 CDT 2009


I'm sorry, I guess I did not search properly before.... For the record, 
I solved my import_array() question: just need to add
%init %{

and the typemap for the std::vector<double> works ok. Thanks for that!

Now the rest...


Raymond de Vries wrote:
> Hi Matthieu,
> Thanks for your quick reply! I did not find this page earlier. I have 
> studied the first page and now I realize again that all my efforts so 
> far (last few days) have crashed on the lack of calling import_array(). 
> Do you have a suggestion for calling import_array() as well? Everywhere 
> I see *that* import_array() needs to be called, but not how...
> I will take a look at the conversion to a single vector. I hope this can 
> be avoided because I cannot simply change the library.
> regards
> Raymond
> Matthieu Brucher wrote:
>> Hi,
>> In fact, it's not that complicated. You may know the way how copying a
>> vector, and this is all you need
>> (http://matt.eifelle.com/2008/01/04/transforming-a-c-vector-into-a-numpy-array/).
>> You will have to copy your data, it is the safest way to ensure that
>> the data is always valid.
>> For the std::vector<>[], I suggest you convert it to a single vector,
>> as the data inside this "array" is not contiguous and it can thus be
>> cumbersome to create a Numpy array from that.
>> Once the structure is prepared, you have to allocate the dimensions,
>> but this may be available online.
>> In case you know that the C++ data won't go away before the Python
>> array, you can always wrap the container
>> (http://matt.eifelle.com/2008/11/04/exposing-an-array-interface-with-swig-for-a-cc-structure/)
>> with SWIG.
>> Matthieu
>> 2009/7/30 Raymond de Vries <reedev@zonnet.nl>:
>>> Hi everyone,
>>> (I sent this message yesterday as well but somehow it didn't come
>>> through...)
>>> I would like to ask your advice how I can use NumPy to wrap my existing
>>> C++ library with 2-dimensional arrays. I am wrapping the library with
>>> swig and I have the typemap function declaration. But now I am
>>> struggling a lot to find an implementation for getting access to the
>>> 2-dimensional arrays in my C++ classes. I have wrapped most of the
>>> library but the multi-dimensional arrays are problematic. From what I
>>> have read, I can use NumPy for this..
>>> There is so much information about NumPy, Numeric etc that it is not
>>> clear anymore which example I can use best. It's clear that NumPy is
>>> probably the way to go.
>>> This is a small example of the class that I would like to wrap:
>>> struct MyClass {
>>>  float array1[2][2];
>>>  std::vector<float> array2[2];
>>> };
>>> I've also read that I need to call import_array() but where should I put
>>> this?
>>> Is there a small example with NumPy c-api to wrap/convert my
>>> 2-dimensional arrays to python?
>>> Thanks a lot already
>>> Raymond
>>> _______________________________________________
>>> NumPy-Discussion mailing list
>>> NumPy-Discussion@scipy.org
>>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

More information about the NumPy-Discussion mailing list