我想从 Python 调用我的 C 函数,以便操作一些 NumPy 数组。函数是这样的:
void c_func(int *in_array, int n, int *out_array);
结果在 out_array 中提供,我事先知道其大小(实际上不是我的函数)。我尝试在相应的 .pyx 文件中执行以下操作,以便能够将输入从 NumPy 数组传递给函数,并将结果存储在 NumPy 数组中:
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)
但是我可以通过调用者不必预先分配适当大小的输出数组的方式来做到这一点吗?