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.


Chi*_*chi 7

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倍).

  • 可能值得注意的是,当仅用于单个值而不是整个数组时,数学版本将比numpy版本更快. (4认同)