我正在为 C 函数编写 Cython 包装器。我有一个具有以下签名的 pxd 文件:
double contr_hrr(int lena, double xa, double ya, double za, double *anorms)
当我尝试从 pyx 文件中调用它时
...
return contr_hrr(len(acoefs),a.origin[0],a.origin[1],a.origin[2],anorms2)
其中 anorms2 是一个 python 列表,我收到错误消息:
cython/ctwo.pyx:35:80: Cannot convert Python object to 'double *'
如何将 python 列表作为 double 组传递给 C 函数?
最佳答案
cimport
array
:from cpython cimport array
从您的列表中创建一个数组对象。数组类构造函数将完成分配内存和迭代列表的所有繁重工作(实际上可以是任何可迭代的)。
cdef array.array anorms2_arr = array.array('d', anorms2)
将其数据传递给您的函数:
return contr_hrr(.., anorms2_arr.data.as_doubles)
array
是一个 standard Python module . Cython 在上面添加了一些特殊的支持,比如缓冲区接口(interface)和通过 arr.data.as_xxx
直接访问底层内存块。不幸的是,此支持仅记录在案 here .
您还可以在 this recent thread 中找到有关数组使用的一些详细信息。 .
关于python - Cython:无法将 Python 对象转换为 'double *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014379/