如何将python数组转换为cython数组?

发布于 2021-01-29 16:53:33

我有一个在常规Python中创建的浮点值数组,我想将其传递给面向底层C函数的cython函数。C函数要求将数组作为浮动指针传递,如下所示:

void setOverlays(const float * verts);

cython包装器如下所示:

def set_overlays(verts):
    setOverlays(verts)

如何转换为cython阵列?我认为这可能有效:

cdef float * cVerts = [v for v in verts]

但不幸的是,生成的值是一个Python对象,在这种情况下,自动转换无效。

ctypes中的等效表达式(有效)是:

cVerts = (c_float * len(verts))()
for i in range(len(verts)):
    cVerts[i] = verts[i]
setOverlays(cast(byteref(cVerts), POINTER(c_float)))

我正在尝试实现同一件事,但是在赛顿

提前致谢!

关注者
0
被浏览
187
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我找到了Cython的特定方式:

    cdef float* cVerts = []
        for i in xrange(len(verts)):
            cVerts[i] = verts[i]
    setOverlays(cVerts)
    

    有趣的是,以上两种解决方案均被cython编译器拒绝。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看