【发布时间】:2018-05-30 17:22:02
【问题描述】:
我有一个 C++ 函数,它返回一个指针 double** - 特别是一个高维矩阵 - 我想使用 Cython 将它包装到一些 python 代码中。我该怎么做?
为了简单起见,这里有一个带有 double* 指针的函数示例。
我的 C++ fib.cpp 代码:
double add(double a, double b)
{
return a+b;
}
double p[]= {1,2,3,4};
double* mult(double a)
{
p[0]=p[0]*a;
p[1]=p[1]*a;
return p;
}
然后是fib.hpp文件:
double add(double a,double b);
double* mult(double a);
然后是pxd文件fib.pxd:
cdef extern from "fib.hpp":
double add(double a,double b);
double* mult(double a);
最后是pyx文件
# distutils: language = c++
# distutils: sources = fib.cpp
cimport fib
def add(a,b):
return fib.add(a,b)
def mult(a): # dropping these lines
return fib.mult(a) # the code works without the double* function
一切都是用相当标准的setup.py编译的:
from distutils.core import setup, Extension
from Cython.Build import cythonize
ext = Extension("fib2cpp",
sources=["fib.pyx", "fib.cpp"],
language="c++")
setup(name="fib",
ext_modules=cythonize(ext))
当我编译代码时:
setup.py build_ext -if
无法将“
double *”转换为 python 对象。
当我尝试使用 double** 函数时,我得到了同样的错误。
我该怎么办?
【问题讨论】: