Cython:无法将Python对象转换为'double*'

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函数?

Nik*_*kin 8

  1. cimport array:

    from cpython cimport array
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从列表中创建一个数组对象.数组类构造函数将执行所有繁重的重组分配内存并迭代您的列表(实际上可以是任何迭代).

    cdef array.array anorms2_arr = array.array('d', anorms2)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将其数据传递给您的函数:

    return contr_hrr(.., anorms2_arr.data.as_doubles)
    
    Run Code Online (Sandbox Code Playgroud)

array是一个标准的Python模块.Cython在顶部添加了一些特殊支持,如缓冲区接口和直接访问底层内存块arr.data.as_xxx.不幸的是,这种支持仅在此处记录.您还可以在此最近的线程中找到有关阵列使用的一些详细信息.