将C缓冲区的内容复制到numpy数组

时间:2016-11-04 16:08:43

标签: python c++ c data-binding cython

我在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中我需要将output1output2转换为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的形式获得输出。我应该如何将指针ptnOutput1ptnOutput2对齐到两个numpy数组? 我已尝试np.frombuffer以及np.PyArray_SimpleNewFromData,但没有运气。我总是得到分段错误。 知道如何正确地做到这一点吗?

1 个答案:

答案 0 :(得分:0)

numpy文档中提到

  

为了使用另一个扩展模块中的C-API,必须调用import_array函数

似乎出现了分段错误错误,因为您没有在代码中包含import_array。

import_array的内部机制比您预期的要复杂,因为它实际上是一个非常冗长的宏,而不是简单的函数。有关更多信息,请参见this