Ric*_*ick 9 python arrays list cython
我正在写一个Cthon函数的Cython包装器.我有一个带有以下签名的pxd文件:
double contr_hrr(int lena, double xa, double ya, double za, double *anorms)
Run Code Online (Sandbox Code Playgroud)
当我尝试从pyx文件中调用它时
...
return contr_hrr(len(acoefs),a.origin[0],a.origin[1],a.origin[2],anorms2)
Run Code Online (Sandbox Code Playgroud)
其中anorms2是一个python列表,我收到错误消息:
cython/ctwo.pyx:35:80: Cannot convert Python object to 'double *'
Run Code Online (Sandbox Code Playgroud)
如何将python列表作为双数组传递给C函数?
cimport array:
from cpython cimport array
Run Code Online (Sandbox Code Playgroud)从列表中创建一个数组对象.数组类构造函数将执行所有繁重的重组分配内存并迭代您的列表(实际上可以是任何迭代).
cdef array.array anorms2_arr = array.array('d', anorms2)
Run Code Online (Sandbox Code Playgroud)将其数据传递给您的函数:
return contr_hrr(.., anorms2_arr.data.as_doubles)
Run Code Online (Sandbox Code Playgroud)array是一个标准的Python模块.Cython在顶部添加了一些特殊支持,如缓冲区接口和直接访问底层内存块arr.data.as_xxx.不幸的是,这种支持仅在此处记录.您还可以在此最近的线程中找到有关阵列使用的一些详细信息.