numpy数组的Cython开销

2024-07-07 08:58:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我用cython编写了一个简单的插值函数,可以从其他cython代码调用(很多)。其中一个参数是numpy数组:

@cython.boundscheck(False) 
@cython.cdivision(True)
@cython.wraparound(False) 
cdef double interpU_cython(double kX,double kY,int iX,int iY, int iTheta,int nbX,int nbY,np.ndarray[double, ndim=3] u, double outVal):
    cdef double uPt, u0, u1
    if (iX >= 0 and iY >= 0 and iX < nbX-1 and iY < nbY-1):
        u0 = u[iX,iY,iTheta] + (u[iX+1,iY,iTheta]-u[iX,iY,iTheta]) * kX
        u1 = u[iX,iY+1,iTheta] + (u[iX+1,iY+1,iTheta]-u[iX,iY+1,iTheta]) * kX
        uPt = u0 + (u1-u0) * kY
    else:
        uPt = outVal
    return uPt

我用cython-a检查了python调用,看起来函数调用依赖于几个python调用:

^{pr2}$

有没有一种有效的方法来传递和使用numpy数组而不产生显著的开销,或者我应该只使用c数组来处理代码的c编译部分中的所有内容?在

使用指向numpy数组第一个元素的指针并在参数中添加数组大小以将其用作一维数组是否安全?在

谢谢


Tags: and代码numpy参数数组cythonintix