(我认为这个问题可以很容易地由专家回答,没有实际的复制粘贴工作的例子,所以我没有花额外的时间在它上面…)
我有一个C++方法,它返回整数数组:
int* Narf::foo() {
int bar[10];
for (int i = 0; i < 10; i++) {
bar[i] = i;
}
return bar;
}
我为它的课程制作了Cython素材:
^{pr2}$下面是我的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),或者应该如何处理?在
我也不知道如何处理这里的内存,因为我在读大文件等等
这看起来可以用这个问题的解决方案来解决:Have pointer to data. Need Numpy array in Fortran order. Want to use Cython
要将其包装为numpy数组,您需要知道大小,然后可以这样做:
上面的代码假设存在返回数组大小的函数
self.c_narf.size()
。在相关问题 更多 >
编程相关推荐