Получение данных из массива ctypes в numpy

Я использую библиотеку C с оболочкой Python (через ctypes ) для выполнения серии вычислений. На разных этапах выполнения я хочу получить данные в Python, в частности массивы numpy . взамен. Я знаю, что эти данные являются копией внутренних данных из документации, и я могу легко получить их в массиве numpy :

 >>> np.ctypeslib.as_array (x)  взамен. Я знаю, что эти данные являются копией внутренних данных из документации, и я могу легко получить их в массиве  numpy : 

 >>> np.ctypeslib.as_array (x)

Это возвращает 1D numpy массив данных.

  • ctype указатель на данные : В этом случае из документации библиотеки я понимаю, что получаю указатель на данные хранятся и используются непосредственно в библиотеке. Когда я делаю type (y) (где y - указатель), я получаю . В этом случае я все еще могу проиндексировать данные вроде y [0] [2] , но мне удалось получить их в numpy только через супер неудобно:

     >>> np. frombuffer (np.core.multiarray.int_asbuffer (
     ctypes.addressof (y.contents), длина_массива * np.dtype (float) .itemsize))
    

Я нашел это в старой ветке numpy списка рассылки Трэвиса Олифанта , но не в документации numpy . Если вместо этого подхода я попробую, как указано выше, я получу следующее:

>>> np.ctypeslib.as_array(y)
...
...  BUNCH OF STACK INFORMATION
...
AttributeError: 'LP_c_double' object has no attribute '__array_interface__'

Это np.frombuffer подход - лучший или единственный способ сделать это? Я открыт для других предложений, но все же хотел бы использовать numpy , поскольку у меня есть много другого кода пост-обработки, который полагается на функциональность numpy , которую я хочу использовать с этими данными .

29
задан dtlussier 4 December 2010 в 20:40
поделиться