在我的代码中,我通常使用numpy数组在方法和类之间进行接口。为了优化程序的核心部分,我使用cython和那些numpy数组的c指针。不幸的是,我目前声明数组的方式相当长。在
例如,假设我有一个方法,它应该返回一个numpy数组someArrayNumpy,但是在函数指针内部,应该使用someArrayPointers来提高速度。我通常这样说:cdef:
numpy.ndarray someArrayNumpy = numpy.zeros(someArraySize)
numpy.ndarray[numpy.double_t, ndim=1] someArrayBuff = someArrayNumpy
double *someArrayPointers = someArrayBuff.data
[... some Code ...]
return someArrayNumpy
如您所见,对于一个数组来说,这需要3行代码,而且通常我必须声明更多的这些数组。在
有没有更紧凑/更聪明的方法来实现这一点?我想我错过了什么。在
编辑:
因此,因为这是由J·马丁诺特·拉加德(J.MartinotLagarde)提出的,所以我计时了C点和“numpy指针”。代码基本上是
^{pr2}$
以及for ii in range(someArraySize):
someArrayBuff[ii] += 1
根据上面的定义,我添加了“ndim=1,mode='c'”只是为了确保。结果为someArraySize=1e8(时间单位:毫秒):testMartinot("cPointers")
531.276941299
testMartinot("numpyPointers")
498.730182648
这是我从以前/不同的基准中大致记得的。在
如果觉得《python定义数组是带指针_在cython中声明numpy数组和c指针》对你有帮助,请点赞、收藏,并留下你的观点哦!