Ka-*_*Yip 22 python arrays numpy
exp
指指数函数
exp
在math module
:https://docs.python.org/2/library/math.html
exp
在numpy module
:http://docs.scipy.org/doc/numpy/reference/generated/numpy.exp.html
为什么numpy
创作者会再次引入此功能?
The*_*tor 28
这些math.exp
作品仅适用于EdChum提到的标量.然而,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 ])
>>>
Run Code Online (Sandbox Code Playgroud)
其他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])
>>>
Run Code Online (Sandbox Code Playgroud)
另请参阅此答案以了解如何numpy
更快math
.
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 loop
Run Code Online (Sandbox Code Playgroud)
numpy版本的速度提高了约9倍(并且可以通过仔细选择优化的数学库来提高速度)
正如@camz在下面所述 - math
在处理单个值时,版本会更快(在快速测试中,快7.5倍).