[Numpy-discussion] Looking to access C array in numpy.
Travis E. Oliphant
oliphant@enthought....
Tue Jan 22 15:03:54 CST 2008
Travis E. Oliphant wrote:
> Clarke, Trevor wrote:
>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> I'm calling some python code from a C++ app via an intermediary library
>> (i.e. I can't directly create Python C objects like Buffers). I'm
>> passing a void* (cast to a long) to the python method and I'd like to
>> use numpy to access that memory as an array. I'll know what the C data
>> type is and the minimum length of the data. It's a continuous array but
>> is multiple dimensions (either 2 dimensional or 3 dimensional BIP). I
>> was able to find a may to create an array accessor over a python buffer
>> but I'm not sure how to back an array with a void* (as a long) or create
>> a buffer object for that memory inside python. Could someone point me in
>> the right direction?
>>
>>
> A couple of options that I see:
>
> 1) Use ctypes to wrap your void* into an object that can be passed into
> numpy.frombuffer.
>
Specifically:
res = ctypes.ARRAY(ctypes.c_bytes,
sizeofbuffer).from_address(void_ptr_as_long)
array = np.frombuffer(res, dtype=mydtype)
> 2) Use the "intentionally not well publicisized function"
> numpy.core.multiarray.int_asbuffer
>
>
res = numpy.core.multiarray.int_asbuffer(void_ptr_as_long, sizeofbuffer,
readonly=False, check=False)
array = np.frombuffer(res, dtype=mydtype)
Have fun!
-Travis O.
More information about the Numpy-discussion
mailing list