[Numpy-discussion] numpy CAPI questions

Lane Brooks lbrooks at MIT.EDU
Sun Oct 19 15:28:49 EDT 2008


I am using the numpy CAPI to write an extension module that returns a 
numpy Array from an imaging data source.  I collect the image into a 
buffer that I allocate. I then create numpy Array using the 
PyArray_New(..) function and pass it the buffer.  I then set the 
NPY_OWNDATA flag on the Array because I want the Array to deallocate the 
buffer when it is deleted.  Is that the correct way to do it?  The code 
snippet below is what I wrote, and it seems to be working just fine, but 
I wanted to verify that I am doing things correctly.



uint16_t *data;

// malloc data and fill it with some image data...

img = PyArray_New(&PyArray_Type, 2, dims, NPY_UINT16, NULL, data, 2, 
NPY_C_CONTIGUOUS | NPY_WRITEABLE | NPY_ALIGNED, NULL);
PyArray_UpdateFlags((PyArrayObject *) img, NPY_OWNDATA | 
NPY_C_CONTIGUOUS | NPY_WRITEABLE | NPY_ALIGNED);
return Py_BuildValue("O", img);



Here are my questions:
1. Does NPY_OWNDATA mean that the object will deallocate the memory when 
the object is deleted?  The manual seems to indicate that as such but it 
is not explicitly stated.

2. Is my reference counting correct?  Do I need to call the 
PyArray_INCREF() on img?

Thanks,
Lane Brooks



More information about the NumPy-Discussion mailing list