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?
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.
we can get the address by using data through array index. It will return the memory of that element present at the given index.
__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.
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.
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']
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With