NumPy 配列を操作するために、Python から C 関数を呼び出したいと思います。関数は次のようになります。
void c_func(int *in_array, int n, int *out_array);
結果はout_arrayで提供され、そのサイズは事前にわかっています(実際には関数ではありません)。NumPy配列から関数に入力を渡し、結果をNumPy配列に保存できるようにするために、対応する.pyxファイルで次のことを試みます。
def pyfunc(np.ndarray[np.int32_t, ndim=1] in_array):
n = len(in_array)
out_array = np.zeros((512,), dtype = np.int32)
mymodule.c_func(<int *> in_array.data, n, <int *> out_array.data)
return out_array
しかし
"Python objects cannot be cast to pointers of primitive types"
、出力割り当てでエラーが発生します。どうすればこれを達成できますか?
(Python の呼び出し元が適切な出力配列を割り当てる必要がある場合は、それを行うことができます。
def pyfunc(np.ndarray[np.int32_t, ndim=1] in_array, np.ndarray[np.int32_t, ndim=1] out_array):
n = len(in_array)
mymodule.cfunc(<int *> in_array.data, n, <int*> out_array.data)
しかし、呼び出し元が適切なサイズの出力配列を事前に割り当てる必要がないように、これを行うことはできますか?