In [10]: import math
In [11]: import numpy
In [13]: arr = numpy.random.random_integers(0, 500, 100000)
In [14]: %timeit numpy.exp(arr)
100 loops, best of 3: 1.89 ms per loop
In [15]: %timeit [math.exp(i) for i in arr]
100 loops, best of 3: 17.9 ms per loop
3条答案
按热度按时间q35jwt9p1#
math.exp
只适用于标量,而numpy.exp
适用于数组。示例:
对于其他
math
函数也是如此。另请参考this answer,了解
numpy
如何比math
更快。wmvff8tz2#
math.exp
处理单个数字,numpy处理numpy数组,由于矢量化的好处,速度快得惊人。exp
函数并不是唯一的一个--一些math
函数有numpy对应函数,如sin
、pow
等。请考虑以下几点:
numpy版本的速度要快9倍(通过仔细选择优化的数学库,可能还能让速度更快)
正如@camz下面所说的--
math
版本在处理单个值时会更快(在一个快速测试中,大约快7.5倍)。ukxgm1gy3#
如果你使用Map手动矢量化Math.exp,它比Numpy快。据我测试。
%时间它NP.exp(arr)
500 µs ± 3.37 µs/循环(7次运行的平均值±标准差,每次运行1000个循环)
%时间Map(数学表达式,arr)
148 ns ± 4 ns/循环(7次运行的平均值±标准差,每次运行10000000次循环)