Python で C++ 関数を実装するために ctypes を使用しています。C++ 関数は、配列へのポインターを返す必要があります。残念ながら、Python で配列にアクセスする方法がわかりません。numpy.frombuffer を試しましたが、うまくいきませんでした。任意の数値の配列を返しただけです。明らかに、私はそれを正しく使用していませんでした。サイズ 10 の配列を使用した簡単な例を次に示します。
function.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)
私が使用しているC++ファイルをコンパイルするには:
g++ -c -fPIC function.cpp -o function.o
g++ -shared -Wl,-soname,library.so -o library.so function.o
Python で配列値にアクセスするために私がしなければならないことはありますか?