Reputation: 10583
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
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
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
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