[Numpy-discussion] Troubles with arrays, proposal for Solution

Vanroose Wim vanroose at ruca.ua.ac.be
Mon Jul 30 03:42:38 EDT 2001


Dear Numerical Python Users,

       It is now clear to me, after the comments of Travis Oliphant, 
Paul Dubois and Phil Austin,  that in EVERY C-file that uses NumPy 
extensions, the  "import_array" statement must be present.

       However, after some try-outs with parts  my code, it seems not a 
good idea to allow a diffusion of the "import_array" statement and  
"PyArrayObject" throughout the "C" code.   The code becomes unclear by 
the mixing of Python concepts and C concepts. 

       Therefore  it is, in my opinion, a good rule to limit the use of  
NumPy to the interface between python  and "C" code; i.e. the function 
where the python parameters are read and the PyArrayObject is created.   

        Do more experienced NumPy users agree???

       The code below illustrates the limited use of NumPy parts.

Wim Vanroose

/////////////////////////
//file: arraytest.h
//////////////////////

#include "Python.h"
#include "arrayobject.h"

double *myTest(void);

//////////////////////
// file: arraytest.c
////////////////////

#include "arraytest.h"

double * myTest(void ){
  double *result;
  ...
  
  return result; 
}

////////////////////
//file: test.c   
////////////////
#include "arraytest.h"

static PyObject *function(PyObject *self, PyObject *args){
  
  ...
  int dimensions[2];  
  
  dimensions[0] = N;
  dimensions[1] = N;

  PyArrayObject *result ;
  result = (PyArrayObject *)PyArray_FromDims(2,dimensions,PyArray_DOUBLE);

  double *data;
  data = myTest();
  memcpy(result->data,data,N*N*sizeof(double));
  return PyArray_Return(result);  
}

static PyMethodDef testMethods[] = {
  {"test",function,1},
  {NULL,NULL}
};

extern "C" {
void  inittest(){
  PyObject *m,*d;
  m = Py_InitModule("test", testMethods);
  import_array();
  d = PyModule_GetDict(m);
}





More information about the NumPy-Discussion mailing list