Создать массив numpy из C-ptr, полученного через ctypes - PullRequest
3 голосов
/ 01 июля 2011

Я выделил кусок double в библиотеке C, и я хотел бы создать массивный одномерный массив на основе этих данных;в идеале я хотел бы иметь две версии: одну, которая только оборачивает c_ptr только для чтения - позволяя слою C сохранять право собственности на данные, и одну, которая копирует данные.Таким образом, упрощенный код будет выглядеть так:

C-код

double * init_and_alloc( size_t size ) {  
  double * ptr = malloc( size * sizeof * ptr );
  // initialize ptr  
  return ptr;  
}  

Python-код

size = 1000 
c_ptr = ctypes_func_ptr_init_and_alloc( size )  
numpy_array = numpy.xxxx( c_ptr , size , dtype.float64) <--- ?????

Так существует ли функция, которую я обозначил как xxxx?

С наилучшими пожеланиями

Йоаким Хоув

1 Ответ

2 голосов
/ 01 июля 2011

Да, numpy.ctypeslib.as_array Чтобы получить данный тип d, as_array(ptr, shape).view(dtype).

Это должно сработать, по крайней мере, в теории (сейчас у меня нет времени проверять).

...