python求和add_快速求和numpy数组元素wis

对比了numpy.sum、reduce(add)以及直接使用sum在求和numpy数组列表时的效率,发现reduce(add)最快,但若先将列表转为numpy数组再使用numpy.sum也能提升速度。对于单次求和,列表转换成numpy数组会带来额外开销。
摘要由CSDN通过智能技术生成

假设我要对numpy数组列表进行元素求和:tosum = [rand(100,100) for n in range(10)]

我一直在寻找最好的方法。看起来numpy.sum很糟糕:timeit.timeit('sum(array(tosum), axis=0)',

setup='from numpy import sum; from __main__ import tosum, array',

number=10000)

75.02289700508118

timeit.timeit('sum(tosum, axis=0)',

setup='from numpy import sum; from __main__ import tosum',

number=10000)

78.99106407165527

减少速度要快得多(接近两个数量级):timeit.timeit('reduce(add,tosum)',

setup='from numpy import add; from __main__ import tosum',

number=10000)

1.131795883178711

看起来reduce甚至比non-numpy sum有一个有意义的领先优势(注意,这些是针对1e6运行的,而不是针对上述时间的1e4):timeit.timeit('reduce(add,tosum)',

setup='from numpy import add; from __main__ import tosum',

number=1000000)

109.98814797401428

timeit.timeit('sum(tosum)',

setup='from __main__ import tosum',

number=1000000)

125.52461504936218

还有其他方法我应该试试吗?有人能解释一下排名吗?

编辑

如果首先将列表转换为numpy数组,numpy.sum肯定更快:tosum2 = array(tosum)

timeit.timeit('sum(tosum2, axis=0)',

setup='from numpy import sum; from __main__ import tosum2',

number=10000)

1.1545608043670654

不过,我只对一次求和感兴趣,因此将数组转换为numpy数组仍然会导致实际的性能损失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值