Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

python

numpy

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?

like image 365
shelper Avatar asked Jun 29 '12 15:06

shelper


People also ask

How do you check the memory size of array with NumPy?

So for finding the memory size we are using following methods: Method 1: Using size and itemsize attributes of NumPy array. size: This attribute gives the number of elements present in the NumPy array. itemsize: This attribute gives the memory size of one element of NumPy array in bytes.

How do you find the address of an array in Python?

we can get the address by using data through array index. It will return the memory of that element present at the given index.

What is __ Array_interface __?

__array_interface__ A dictionary of items (3 required and 5 optional). The optional keys in the dictionary have implied defaults if they are not provided. The keys are: shape (required) Tuple whose elements are the array size in each dimension.

What is NumPy memory-map?

memmap() function. The memmap() function is used to create a memory-map to an array stored in a binary file on disk. Memory-mapped files are used for accessing small segments of large files on disk, without reading the entire file into memory. NumPy's memmap's are array-like objects.


2 Answers

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'] 
like image 85
Joe Kington Avatar answered Sep 28 '22 02:09

Joe Kington


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.

like image 22
jfs Avatar answered Sep 28 '22 01:09

jfs