Skip to content Skip to sidebar Skip to footer

What Is A Python Buffer Object Pointing To The Start Of The Array’s Data?

A = np.arange(12) B = A.reshape(3, 4) A[0] = 42 print(B) print(A) print(np.may_share_memory(A, B)) print(A.data == B.data) Running above code, I am surprised that print(A.data ==

Solution 1:

I prefer __array_interface__ as a way of looking at the attributes, including data buffer address:

In [766]: A = np.arange(12)
In [767]: B = A.reshape(3,4)
In [768]: A[0] = 42
In [769]: A
Out[769]: array([42,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
In [770]: B
Out[770]: 
array([[42,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [771]: A.data
Out[771]: <memory at 0xb16ef5dc>
In [772]: B.data
Out[772]: <memory at 0xb1719cdc>
In [773]: A.__array_interface__
Out[773]: 
{'data': (156295616, False),
 'descr': [('', '<i4')],
 'shape': (12,),
 'strides': None,
 'typestr': '<i4',
 'version': 3}
In [774]: B.__array_interface__
Out[774]: 
{'data': (156295616, False),
 'descr': [('', '<i4')],
 'shape': (3, 4),
 'strides': None,
 'typestr': '<i4',
 'version': 3}

A.__array_interface__['data'][0] values do match

The documentation for A.data is:

Python buffer object pointing to the start of the array’s data

but to ordinary Python programmers that can be misleading. @ajcr's comment is better. There is a difference between 'buffer object' and the address of the arrays data buffer.

============

I haven't used the data attribute much. One of the few cases has been to create an array using the ndarray function

how can I specify the memory address of a Numpy array using ctypes?

In [806]: np.ndarray((4,),buffer=A.data, dtype=int, offset=12)
Out[806]: array([3, 4, 5, 6])
In [807]: np.ndarray((4,),buffer=B.data, dtype=int, offset=16)
Out[807]: array([4, 5, 6, 7])

================

A.data just prints its repr, and is just as non-informative as:

In [808]: o=object()
In [809]: o
Out[809]: <object at 0xb729fc90>

Post a Comment for "What Is A Python Buffer Object Pointing To The Start Of The Array’s Data?"