From: Will B. <wboyd@MIT.EDU> - 2014-02-06 01:25:14
|
Thanks David! Actually, it looks like I accidentally cut out the portion of my email which said that I know that I can use the numpy.i typemaps for this. But unfortunately, NumPy is not available on some of the HPC clusters that I am using. So a purely SWIG typemap for C-array-to-Python-list conversion would be preferable. Any alternative ideas for how to do this? On Tue, Feb 4, 2014 at 6:03 AM, David Froger <dav...@in...> wrote: > Hi, > > Seems from the comment in your code that you're alread using NumPy. NumPy > provides typemaps to convert C array to NumPy array back and forth. > > http://docs.scipy.org/doc/numpy/reference/swig.interface-file.html > > There is no typemap for array that are returned function value, but you > could > %inline an helper function: > > void get_rand_list_helper(int length, double* array); > > that will call get_rand_list and then wrap this helper function using > ARGOUT_ARRAY1 typemap. > > The original function can be %ignore 'd (no wrapping generated for it), and > the helper function can be %rename 'd to the original name. > > Hope it helps! > David > > Quoting Will Boyd (2014-02-04 00:33:02) > > Hello, > > > > I am trying to write a piece of code in C++ which can produce an array > and > > return it as as a Python list. I understand that I can return the > > > > The stripped down C++ routine is below: > > > > /* File get_rand_list.cpp */ > > #include "get_rand_list.h" > > > > /* Define function implementation */ > > double* get_rand_list(int length) { > > > > output_list = new double[length]; > > > > /* Populate input NumPy array with random numbers */ > > for (int i=0; i < length; i++) > > output_list[i] = ((double) rand()) / RAND_MAX; > > > > return output_list; > > } > > > > I would like to be able to use this in Python as so: > > > > from get_rand_list import * > > list = get_rand_list(10) > > > > How can I use SWIG typemaps to wrap the C++ routine to do this? If there > is a > > simpler way which requires some small modifications to the C++ routine > that is > > most likely fine. > > > > Thanks for your help, > > > > -- > > Will Boyd > > Nuclear Science & Engineering > > Massachusetts Institute of Technology > > Email: wb...@mi... > > Cell: 423.413.8469 > > -- > David Froger > SED-PRO > "La simplicité est la sophistication suprême." > -- Léonard de Vinci > -- Will Boyd Nuclear Science & Engineering Massachusetts Institute of Technology Email: wb...@mi... Cell: 423.413.8469 |