
I want to pass 1 integer and 2 numpy array into the C function as followings:
void update_incident_field(int k, float *a, int na, float *b, int nb) { for (i=0; i<na; i ++) { a[i] = a[i] + b[i] * k; } }
But I don't know how to write the interface code (***.i) Can someone help me?
Thanks!
The swig interface code I written(did't work, strange output)
%module example %{ #define SWIG_FILE_WITH_INIT #include "example.h" %} %include "numpy.i"
%init %{ import_array(); %}
%apply (float* INPLACE_ARRAY1, int DIM1) {(float *a, int na), (float *b, int nb)};
%include "example.h"

Hi, I don't know exactly, but try replacing the one line %apply (float* INPLACE_ARRAY1, int DIM1) {(float *a, int na), (float *b, int nb)};
with two lines:
%apply (float* INPLACE_ARRAY1, int DIM1) {(float *a, int na)}; %apply (float* INPLACE_ARRAY1, int DIM1) {(float *b, int nb)};
Don't know about the '{' '}' brakets. b could probably be "more general" as INPUT_ARRAY1
HTH -S.
On Thu, May 20, 2010 at 1:43 AM, Steven Nien steven.nien@gmail.com wrote:
I want to pass 1 integer and 2 numpy array into the C function as followings:
void update_incident_field(int k, float *a, int na, float *b, int nb) { for (i=0; i<na; i ++) { a[i] = a[i] + b[i] * k; } }
But I don't know how to write the interface code (***.i) Can someone help me?
Thanks!
The swig interface code I written(did't work, strange output)
%module example %{ #define SWIG_FILE_WITH_INIT #include "example.h" %} %include "numpy.i"
%init %{ import_array(); %}
%apply (float* INPLACE_ARRAY1, int DIM1) {(float *a, int na), (float *b, int nb)};
%include "example.h"
NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion

I tried the following:
%module example %{ #define SWIG_FILE_WITH_INIT //#include "example.h" %} %include "numpy.i"
%init %{ import_array(); %}
%apply (float* INPLACE_ARRAY1, int DIM1) {(float *a, int na), (float *b, int nb)};
%inline { void update_incident_field(int k, float *a, int na, float *b, int nb) { for (i=0; i<na; i ++) { a[i] = a[i] + b[i] * k; } } }
$ swig -python example.i
and the resulting example_wrap.c file looks OK for me. What strange output did you get?
On May 19, 2010, at 7:43 PM, Steven Nien wrote:
I want to pass 1 integer and 2 numpy array into the C function as followings:
void update_incident_field(int k, float *a, int na, float *b, int nb) { for (i=0; i<na; i ++) { a[i] = a[i] + b[i] * k; } }
But I don't know how to write the interface code (***.i) Can someone help me?
Thanks!
The swig interface code I written(did't work, strange output)
%module example %{ #define SWIG_FILE_WITH_INIT #include "example.h" %} %include "numpy.i"
%init %{ import_array(); %}
%apply (float* INPLACE_ARRAY1, int DIM1) {(float *a, int na), (float *b, int nb)};
%include "example.h"
<ATT00002.txt>
** Bill Spotz ** ** Sandia National Laboratories Voice: (505)845-0170 ** ** P.O. Box 5800 Fax: (505)284-0154 ** ** Albuquerque, NM 87185-0370 Email: wfspotz@sandia.gov **

Hi
Thanks for all your help!
I found the "strange" result was caused by my algorithm(CUDA).
The swig part is very ok:)
On Thu, May 20, 2010 at 11:18 PM, Bill Spotz wfspotz@sandia.gov wrote:
I tried the following:
%module example %{ #define SWIG_FILE_WITH_INIT //#include "example.h" %} %include "numpy.i"
%init %{ import_array(); %}
%apply (float* INPLACE_ARRAY1, int DIM1) {(float *a, int na), (float *b, int nb)};
%inline { void update_incident_field(int k, float *a, int na, float *b, int nb) { for (i=0; i<na; i ++) { a[i] = a[i] + b[i] * k; } } }
$ swig -python example.i
and the resulting example_wrap.c file looks OK for me. What strange output did you get?
On May 19, 2010, at 7:43 PM, Steven Nien wrote:
I want to pass 1 integer and 2 numpy array into the C function as followings:
void update_incident_field(int k, float *a, int na, float *b, int nb) { for (i=0; i<na; i ++) { a[i] = a[i] + b[i] * k; } }
But I don't know how to write the interface code (***.i) Can someone help me?
Thanks!
The swig interface code I written(did't work, strange output)
%module example %{ #define SWIG_FILE_WITH_INIT #include "example.h" %} %include "numpy.i"
%init %{ import_array(); %}
%apply (float* INPLACE_ARRAY1, int DIM1) {(float *a, int na), (float *b, int nb)};
%include "example.h"
<ATT00002.txt>
** Bill Spotz ** ** Sandia National Laboratories Voice: (505)845-0170 ** ** P.O. Box 5800 Fax: (505)284-0154 ** ** Albuquerque, NM 87185-0370 Email: wfspotz@sandia.gov **
NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
participants (3)
-
Bill Spotz
-
Sebastian Haase
-
Steven Nien