您好我正在尝试将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
答案 0 :(得分:4)
你有一些缩进错误和缺少冒号。但你真正的问题是:
cdef Tuple1, Tuple2 = funA(X,Y)
删除cdef
,没关系。它看起来不像cdef
和tuple unpacking相当混合,因为你将它们视为Python对象,它应该没问题。
但是,请注意,您并不需要从funA
返回任何内容,因为您在那里修改了X
和Y
。