在python中,对于标量,math.acos()比numpy.arccos()更快吗?

时间:2016-02-03 17:31:00

标签: python math numpy

我使用大量的几何计算在Python中进行一些科学计算,并且在使用numpy与标准math库之间遇到了重大差异。

>>> x = timeit.Timer('v = np.arccos(a)', 'import numpy as np; a = 0.6')
>>> x.timeit(100000)
0.15387153439223766
>>> y = timeit.Timer('v = math.acos(a)', 'import math; a = 0.6')
>>> y.timeit(100000)
0.012333301827311516

超过10倍的加速!我几乎所有的标准数学函数都使用numpy,我只是假设它已经过优化,至少和math一样快。对于足够长的向量,numpy.arccos()最终将赢得与使用math.acos()的循环,但由于我只使用标量情况,使用math.acos(),math.asin()是否有任何缺点, math.atan()全面而不是numpy版本?

1 个答案:

答案 0 :(得分:6)

使用math模块中的标量功能完全没问题。由于

numpy.arccos函数可能会变慢

如果性能差异对您的问题很重要,则应检查是否确实无法使用阵列操作。正如user2357112在评论中所说,数组是numpy真正擅长的。