cython在cdef中返回元组?

时间:2016-12-13 19:32:08

标签: cython

您好我正在尝试将python代码转换为cython以加快其计算速度。我试图将cython代码中的多个数组从cdef返回到cpdef。基于经典C,我可以使用指针或元组。我决定使用元组因为大小不一。我知道以下代码不起作用,有什么帮助吗?谢谢!

import numpy as np
cimport numpy as np

cdef tuple funA(double[:] X, double[:] Y): 
    cdef int nX, nY, i
    nX = len(X)
    nY = len(Y)

    for i in range(nX):
        X[i] = X[i]*X[i]

    for i in range(nY):
        Y[i] = Y[i]*Y[i]

    return X,Y

cpdef Run(double[:] X, double[:] Y)
    cdef Tuple1, Tuple2 = funA(X,Y)

    # Do some calculation with Tuple1 and Tuple2 
    # Example

    cdef int i, nTuple1, nTuple2

    nTuple1 = len(Tuple1)    
    for i in range(nTuple1):
        Tuple1[i] = Tuple1[i]**2

    nTuple2 = len(Tuple2)
    for i in range(nTuple2):
        Tuple2[i] = Tuple2[i]/2

    return Tuple1, Tuple2

1 个答案:

答案 0 :(得分:4)

你有一些缩进错误和缺少冒号。但你真正的问题是:

cdef Tuple1, Tuple2 = funA(X,Y)

删除cdef,没关系。它看起来不像cdef和tuple unpacking相当混合,因为你将它们视为Python对象,它应该没问题。

但是,请注意,您并不需要从funA返回任何内容,因为您在那里修改了XY