[Numpy-discussion] Numpy array from ctypes pointer object?
Mark Heslep
mark at mitre.org
Wed Jul 12 12:42:44 CDT 2006
I don't see a clean way to create a numpy array from a ctypes pointer object. Is the __array_interface_ in ctypes the thing thats missing needed to make this happen? I've followed Albert's Scipy cookbook on ctypes here
http://www.scipy.org/Cookbook/Ctypes <-- getting dated now for numpy SVN but the idea is clear
This shows clean ways to
1) Create a ctype array object from a numpy array:
npptr= nparray.__array_interface__['data'][0]
ctarray = (c_double * nparray.size).from_address(npptr)
2) Create a numpy array from a ctypes array (not a pointer):
ctarray = (c_double * 2)()
nparray = N.array( ctarray )
But if I'm starting with say, a POINTER(c_int) and a separate size argument that's returned from a ctypes foreign function or provided by _fields_ element in a ctypes structure, then I'm unclear how to provide the pointer in Python to numpy. The numpy methods or creating an array in Python as I see it are basically two:
N.array, N.asarray <-- require a sequence object
N.fromstring, N.frombuffer <-- not available unless given c_char_p and even thats wrong if I don't want zero termination.
The attributes in nparray.__array_interface_ are not writable, so no joy there.
On the C side the PyArray_SimpleNewFromData( ..dimensions, ...data ptr) C API does the job nicely. Is there a ctypes paradigm for SimpleNew...?
Mark
More information about the Numpy-discussion
mailing list