arrays - 将Numpy数组传递给用Cython包装的C代码

标签 arrays numpy cython

我想使用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/

相关文章:

c++ - 打印使用 C++ 中的新方法制作的二维数组

python - NumPy:需要一个函数,其中:f(目标数组,索引数组,某个数字)-> 目标数组,其索引填充有某个数字

c - 如何使用 Cython 将 C 结构数组转换为 numpy 数组

python - Cython 和 CPython 之间的列表理解结果不同

python - 有效地生成所有排列

python - Cython 回调中的段错误

python - 使用一维 bool 索引从二维数组中选择

c++ - 将 ObjC/C++ 中的字节数组编码到 IOS 中的 C# 时出现问题

c++ - 将对象加载到指向对象的指针数组中

python - 多个矩阵的加权和