Как получить адрес памяти массива NumPy для C

Я построил массив NumPy::

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

тогда я хочу увидеть, где его данные::

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> 

...

почему каждый раз адрес смещения отличается? если я хочу передать данные в функцию переменного тока, используя c_types с помощью::

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

Как я должен получить значение PTR?

3 ответа

Решение

Кроме того, посмотрите на ndarray.__array_interface__, which is a dict that contains all of the information you're after.

В твоем случае,

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

a.data может быть свойством, чья функция получения создает новый буферный объект (метаданные) при каждом вызове.

Чтобы узнать адрес смотрите как numpy.ctypeslib.as_ctypes() реализовано.

В настоящее время NumPy имеет задокументированный интерфейс для получения необработанного адреса указателя на такой массив:

      a = np.asarray([2, 3])
address = a.ctypes.data
Другие вопросы по тегам