[Numpy-discussion] [EXTERNAL] Question Regarding numpy.i and 2-dimensional input array

Bill Spotz wfspotz@sandia....
Wed Sep 5 00:38:49 CDT 2012


Dylan,

The error appears to be in example.c, not example_wrap.c.  The way you have written it, I think it should be double **x0.

But the SWIG typemaps require double*.

You could write it with double *x0, but then index with x0[i*m+j].

Or, if you want the [i][j] indexing, you could write a wrapper function with double *x1 that calls your matrix_example() function with &x1.  And then wrap the wrapper function.

-Bill

On Sep 4, 2012, at 5:18 PM, Dylan Temple wrote:

> Hello,
> 
> I am trying to use numpy.i to move a function from python to C that takes a 2-D array as an input and am having difficulty.  The code is pretty long so I've made a simple example that recreates the error.
> 
> example.c:
> 
> #include <stdio.h>
> #include "example.h"
> 
> void matrix_example (int n, int m, double *x0, \
> 				   int p, double *x)
> {
> 	int i;
> 	int j;
> 	int k;
> 	for (i = 0; i < n; ++i) {
> 		for (j=0; j < 0; ++j) {
> 			x[k] = 2 * x0[i][j];
> 			++k;
> 		}
> 	}
> }
> 
> example.h:
> 
> void matrix_example (int n, int m, double *x0, int p, double *x);
> 
> example.i:
> 
> %module example
> 
> %{
> #define SWIG_FILE_WITH_INIT
> #include "example.h"
> %}
> 
> %include "numpy.i"
> 
> %init %{
> 	import_array();
> %}
> 
> %apply (int DIM1, int DIM2, double *IN_ARRAY2) {(int n, int m, double *x0)};
> %apply (int DIM1, double *ARGOUT_ARRAY1) {(int p, double *x)};
> 
> I then use prompts:
> 
> $ swig -python example.i
> $ python setup.py build_ext --inplace
> 
> However I get the error:
> example.c: In function ‘matrix_example’:
> example.c:12: error: subscripted value is neither array nor pointer
> error: command 'gcc' failed with exit status 1
> 
> It seems as though x0 is not actually being passed to the function as a 2-D array.  Any help on why this error is happening would be great!
> 
> 
> Thank you,
> Dylan Temple
> 
> -- 
> Dylan Temple
> Graduate Student, University of Michigan NA&ME Department
> B.E. Naval Architecture
> M.S.E Naval Architecture
> 121 NA&ME Department, 2600 Draper Dr.
> 607-592-1749
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

** 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 **




More information about the NumPy-Discussion mailing list