[Numpy-discussion] numpy.ctypeslib.ndpointer and the restype attribute [patch]
Jens Rantil
jens.rantil@telia....
Thu Mar 26 06:41:28 CDT 2009
Hi again,
On Mon, 2009-03-23 at 14:36 +0100, Jens Rantil wrote:
> So I have a C-function in a DLL loaded through ctypes. This particular
> function returns a pointer to a double. In fact I know that this
> pointer points to the first element in an array of, say for
> simplicity, 200 elements.
>
> How do I convert this pointer to a NumPy array that uses this data
> (ie. no copy of data in memory)? I am able to create a numpy array
> using a copy of the data.
Just a follow up on this topic:
While constructing a home made __array_interface__ attribute does the
job of converting from a ctypes pointer to a NumPy array, it seems both
like an undocumented and magic solution to a common problem.
Therefor, I used the code that Sturla Molden posted and wrote a highly
useful piece of code that enables ctypes DLL functions to return NumPy
arrays on the fly. See it as a replacement for the incorrectly
documented ndpointer/restype functionality if you want. The code is
attached with the mail, including Nose tests.
An example workflow to have a ctypes DLL function return a 4 element
double array would be:
>>> returns_ndarray(dll.my_func, ctypes.c_double, 4)
>>> my_array = dll.my_func()
>>> my_array
array([ 2.1, 4. , 97. , 6. ])
Notice that 'my_array' will be sharing the memory that the DLL function
returned. Also, I have not done extensive testing of ndim and shape
parameters.
Wouldn't my code, or a tweak of it, be a nice feature in
numpy.ctypeslib? Is this the wrong channel for proposing things like
this?
Thanks,
Jens Rantil
Lund University & Modelon AB, Sweden
-------------- next part --------------
A non-text attachment was scrubbed...
Name: returns_ndarray.py
Type: text/x-python
Size: 5148 bytes
Desc: not available
Url : http://mail.scipy.org/pipermail/numpy-discussion/attachments/20090326/566fefc5/attachment-0001.py
More information about the Numpy-discussion
mailing list