(我认为这个问题可以很容易地由专家回答,而无需实际的复制粘贴工作示例,所以我没有花额外的时间在上面……)
我有一个 C++ 方法,它返回一个整数数组:
int* Narf::foo() {
int bar[10];
for (int i = 0; i < 10; i++) {
bar[i] = i;
}
return bar;
}
我为它的类创建了 Cython 的东西:
cdef extern from "Narf" namespace "narf":
cdef cppclass Narf:
Narf() except +
int* foo()
这些是我的 Python 包装器:
cdef class PyNarf:
cdef Narf c_narf
def __cinit__(self):
self.c_narf = Narf()
def foo(self):
return self.c_narf.foo()
问题在于foo
方法及其int*
返回类型(我在此示例中未列出的其他方法工作得很好!)。它无法编译并给出以下错误:
def foo(self):
return self.c_narf.foo()
^
------------------------------------------------------------
narf.pyx:39:37: Cannot convert 'int *' to Python object
当然,它显然不接受int *
作为返回类型。我该如何解决这个问题?有没有一种简单的方法可以将它包装int *
到一个 numpy 数组中(我更喜欢 numpy),或者应该如何处理?
我也不确定如何在这里处理内存,因为我正在读取大文件等。