在我的代码中,我通常使用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. Martinot-Lagarde问我,我指的是C指针和“numpy指针”.代码基本上是
for ii in range(someArraySize):
someArrayPointers[ii] += 1
和
for ii in range(someArraySize):
someArrayBuff[ii] += 1
与上面的定义,但我添加“ndim = 1,mode =’c’”只是为了确保.结果是someArraySize = 1e8(以ms为单位的时间):
testMartinot("cPointers")
531.276941299
testMartinot("numpyPointers")
498.730182648
这是我从之前/不同的基准测试中粗略记住的.