python定义数组是带指针_在cython中声明numpy数组和c指针

在我的代码中,我通常使用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

这是我从以前/不同的基准中大致记得的。在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值