我在C中有一个这样的函数:
源文件
// foo.cpp
int foo(int input1, double *output1, int size1, int* output2, int size2)
{
// does stuff and allocate space for output1 and output2
return 0;
}
头文件
// foo.h
int foo(int input1, double *output1, int size1, int* output2, int size2);
在Cython中我需要将output1
和output2
转换为numpy数组,因此在foo.pyx
我执行以下步骤:
cdef extern from "foo.h":
cdef int foo(int input1, double* output1, int size1, double* output2, int size2)
cdef double* ptnOutput1
cdef int* ptnOutput2
foo(1, ptnOutput1, 10, ptnOutput2, 10)
但现在我无法以两个np.array
的形式获得输出。我应该如何将指针ptnOutput1
和ptnOutput2
对齐到两个numpy数组?
我已尝试np.frombuffer
以及np.PyArray_SimpleNewFromData
,但没有运气。我总是得到分段错误。
知道如何正确地做到这一点吗?
答案 0 :(得分:0)
numpy文档中提到
为了使用另一个扩展模块中的C-API,必须调用
import_array
函数
似乎出现了分段错误错误,因为您没有在代码中包含import_array。
import_array
的内部机制比您预期的要复杂,因为它实际上是一个非常冗长的宏,而不是简单的函数。有关更多信息,请参见this