Python列表来用Cython(Python list to Cython)

2019-07-19 15:34发布

我想知道如何正常Python列表转换为C清单,用Cython,过程,并返回一个Python列表。 喜欢:

Python脚本:

import mymodule

a = [1,2,3,4,5,6]
len = len(a)
print(mymodule.process(a,len))

Cythina脚本(mymodule.pyd):

cpdef process(a, int len):
    cdef float y
    for i in range(len):
        y = a[i]
        a[i] = y * 2
    return a

我读到MemoryView和许多其他的东西,但我没有真正unterstand什么发生,有很多例子都使用numpy的(我不想用我的脚本避免用户下载一个大包......反正我觉得这是唐”我的软件进行t工作)。 我需要一个非常简单的例子就明白发生了什么确切。

Answer 1:

你需要在列表的内容明确复制到阵列。 例如...

cimport cython
from libc.stdlib cimport malloc, free

...

def process(a, int len):

    cdef int *my_ints

    my_ints = <int *>malloc(len(a)*cython.sizeof(int))
    if my_ints is NULL:
        raise MemoryError()

    for i in xrange(len(a)):
        my_ints[i] = a[i]

    with nogil:
        #Once you convert all of your Python types to C types, then you can release the GIL and do the real work
        ...
        free(my_ints)

    #convert back to python return type
    return value


文章来源: Python list to Cython