Я использую библиотеку 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
, которую я хочу использовать с этими данными .