Thanks Bill, it helps me a lot ! My function works fine now. But I encounter an other problem. This time with a NumPy array of 2 dimensions.
Here is the function I want to use : /****************/ double matSum(double** mat, int n, int m){ int i,j; double sum = 0.0; for (i=0;i<n;i++){ for (j=0;j<m;j++){ sum += mat[i][j]; } } return sum; } /****************/ I supposed that the typemaps to use is the following : %apply (double* IN_ARRAY2, int DIM1, int DIM2) {(double** mat, int n, int m)}; But it is not working. Of course, my typemaps assignement is not compatible with my function parameters. I tried several ways of using a two dimensional array but I'm not sure what is the best way to do it ? Thanks --- Kevin Françoisse Ph.D. at Machine Learning Group at UCL Belgium kevin.francoi...@uclouvain.be On Tue, Mar 24, 2009 at 6:13 PM, Bill Spotz <wfsp...@sandia.gov> wrote: > Kevin, > > You need to declare vecSum() *after* you %include "numpy.i" and use the > %apply directive. Based on what you have, I think you can just get rid of > the "extern double vecSum(...)". I don't see what purpose it serves. As > is, it is telling swig to wrap vecSum() before you have set up your numpy > typemaps. > > > On Mar 24, 2009, at 10:33 AM, Kevin Françoisse wrote: > > Hi everyone, >> >> I have been using NumPy for a couple of month now, as part of my research >> project at the university. But now, I have to use a big C library I wrote >> myself in a python project. So I choose to use SWIG for the interface >> between both my python script and my C library. To make things more >> comprehensible, I wrote a small C methods that illustrate my problem: >> >> /* matrix.c */ >> >> #include <stdlib.h> >> #include <stdio.h> >> /* Compute the sum of a vector of reals */ >> double vecSum(int* vec,int m){ >> int i; >> double sum =0.0; >> >> for(i=0;i<m;i++){ >> sum += vec[i]; >> } >> return sum; >> } >> >> /***/ >> >> /* matrix.h */ >> >> double vecSum(int* vec,int m); >> >> /***/ >> >> /* matrix.i */ >> >> %module matrix >> %{ >> #define SWIG_FILE_WITH_INIT >> #include "matrix.h" >> %} >> >> extern double vecSum(int* vec, int m); >> >> %include "numpy.i" >> >> %init %{ >> import_array(); >> %} >> >> %apply (int* IN_ARRAY1, int DIM1) {(int* vec, int m)}; >> %include "matrix.h" >> >> /***/ >> >> I'm using a python script to compile my swig interface and my C files >> (running Mac OS X 10.5) >> >> /* matrixSetup.py */ >> >> from distutils.core import setup, Extension >> import numpy >> >> setup(name='matrix', version='1.0', ext_modules =[Extension('_matrix', >> ['matrix.c','matrix.i'], >> include_dirs = [numpy.get_include(),'.'])]) >> >> /***/ >> >> Everything seems to work fine ! But when I test my wrapped module in >> python with an small NumPy array, here what I get : >> >> >>> import matrix >> >>> from numpy import * >> >>> a = arange(10) >> >>> matrix.vecSum(a,a.shape[0]) >> Traceback (most recent call last): >> File "<stdin>", line 1, in <module> >> TypeError: in method 'vecSum', argument 1 of type 'int *' >> >> How can I tell SWIG that my Integer NumPy array should represent a int* >> array in C ? >> >> Thank you very much, >> >> Kevin >> <ATT00002.txt> >> > > ** Bill Spotz ** > ** Sandia National Laboratories Voice: (505)845-0170 ** > ** P.O. Box 5800 Fax: (505)284-0154 ** > ** Albuquerque, NM 87185-0370 Email: wfsp...@sandia.gov ** > > > > > > >
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion