exp表示指数函数
math module中的exp:https://docs.python.org/2/library/math.html
numpy module中的exp:http://docs.scipy.org/doc/numpy/reference/generated/numpy.exp.html
为什么numpy创建者会再次引入这个函数呢?
发布于 2015-06-08 22:55:50
正如EdChum提到的,math.exp只适用于标量。而numpy.exp将适用于数组。
示例:
>>> import math
>>> import numpy as np
>>> x = [1.,2.,3.,4.,5.]
>>> math.exp(x)
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
math.exp(x)
TypeError: a float is required
>>> np.exp(x)
array([ 2.71828183, 7.3890561 , 20.08553692, 54.59815003,
148.4131591 ])
>>> 其他math函数也是如此。
>>> math.sin(x)
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
math.sin(x)
TypeError: a float is required
>>> np.sin(x)
array([ 0.84147098, 0.90929743, 0.14112001, -0.7568025 , -0.95892427])
>>> 另请参考THIS ANSWER,了解numpy如何比math更快。
发布于 2015-06-08 22:59:07
math.exp在单个数字上工作,numpy版本在numpy数组上工作,由于矢量化的好处,它的速度快得多。在这一点上,exp函数并不是唯一的--有几个math函数都有numpy对应物,比如sin、pow等。
请考虑以下几点:
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 loopnumpy版本的速度提高了约9倍(通过仔细选择优化的数学库,可能还会更快)
正如@camz下面所述- math版本在处理单个值时会更快(在快速测试中,速度快约7.5倍)。
发布于 2019-02-02 22:53:20
如果使用map手动向量化math.exp,它会比numpy更快。就我所测试的..。
%timeit np.exp(arr)
500µs±3.37µs /环路(平均值±标准dev.共7次运行,每次1000次循环)
%timeit映射(math.exp,arr)
每环148 ns±4 ns (平均值±标准dev.共7次运行,每次10000000次循环)
https://stackoverflow.com/questions/30712402
复制相似问题