Я использую ctypes для реализации функции С++ в Python. Функция С++ должна возвращать указатель на массив. К сожалению, я не понял, как получить доступ к массиву в Python. Я попробовал numpy.frombuffer, но это не удалось. Он просто вернул массив произвольных чисел. Очевидно, я не использовал его правильно. Вот простой пример с массивом размером 10:
Содержимое функции .cpp:
extern "C" int* function(){
int* information = new int[10];
for(int k=0;k<10;k++){
information[k] = k;
}
return information;
}
Содержимое wrapper.py:
import ctypes
import numpy as np
output = ctypes.CDLL('./library.so').function()
ArrayType = ctypes.c_double*10
array_pointer = ctypes.cast(output, ctypes.POINTER(ArrayType))
print np.frombuffer(array_pointer.contents)
Чтобы скомпилировать файл С++, я использую:
g++ -c -fPIC function.cpp -o function.o
g++ -shared -Wl,-soname,library.so -o library.so function.o
Есть ли у вас какие-либо предложения о том, что мне нужно сделать для доступа к значениям массива в Python?