我想使用Cython打包一些现有的C代码。我希望能够设置多个numpy数组,然后将这些数组作为参数传递给函数采用标准c数组(1d和2d)的C代码。在弄清楚如何编写适当的.pyx代码以正确处理事情方面,我有些困惑。
有一些功能,但是funcs.h文件中的典型功能如下所示:
double InnerProduct(double *A, double **coords1, double **coords2, const int len)
然后,我有一个.pyx文件,该文件具有相应的行:
cdef extern from "funcs.h":
double InnerProduct(double *A, double **coords1, double **coords2, int len)
因为cython不支持const,所以我摆脱了const。我遇到的困难是包装程序代码应该如何将MxN numpy数组传递给** coords1和** coords2参数。
我一直在努力寻找适合此类问题的正确文档或教程。任何建议将不胜感激。
最佳答案
您可能需要Cython的“ typed memoryviews”功能,可以详细了解here。基本上,这是使用numpy或其他数组的更新,更统一的方法。这些可以在python-land中以numpy数组的形式公开,也可以将它们导出到Python(例如here)。您必须注意跨步的工作原理,并确保您对例如C连续数组和类FORTRAN数组,但是文档非常清楚如何做到这一点。
在不了解函数的情况下,很难确切地确切地了解实现此功能的最佳方法-即,C函数对数组是只读的吗? (我根据您提供的签名认为是,但不确定100%。)如果是这样,则无需担心需要复制以获得C连续状态,因为C函数不需要交谈回到Python级的numpy数组。但是键入的memoryviews可以让您以最小的麻烦来做任何事情。
关于arrays - 将Numpy数组传递给用Cython包装的C代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4495420/