shelper
shelper

Reputation: 10583

how to get the memory address of a numpy array for C

I constructed an numpy array::

a=np.ndarray([2,3]) 

then i want to see where its data are::

a.data 
>>>Out[213]: <read-write buffer for 0x0482C1D0, size 48, offset 0 at 0x049E87A0> 
a.data 
>>>Out[214]: <read-write buffer for 0x0482C1D0, size 48, offset 0 at 0x049E82A0> 
a.data 
>>>Out[215]: <read-write buffer for 0x0482C1D0, size 48, offset 0 at 0x049E81C0> 

...

why every time the offset address is different? if i want to transfer the data to a c function using c_types by::

ctypes_array = (ctypes.c_char * a.size * 8).from_address(ptr) 

how should i get the value of ptr?

Upvotes: 30

Views: 22793

Answers (3)

Maksym Ganenko
Maksym Ganenko

Reputation: 1428

NumPy currently has documented interface to get raw pointer address to an array like this:

a = np.asarray([2, 3])
address = a.ctypes.data

Upvotes: 3

Joe Kington
Joe Kington

Reputation: 284870

Also, have a look at ndarray.__array_interface__, which is a dict that contains all of the information you're after.

In your case,

pointer, read_only_flag = a.__array_interface__['data']

Upvotes: 39

jfs
jfs

Reputation: 414795

a.data might be a property whose getter function creates a new buffer object (meta data) on each call.

To get the address see how numpy.ctypeslib.as_ctypes() is implemented.

Upvotes: 3

Related Questions