比较一下numpy.math和Python标准库的math.sin的计算速度

我用下面这个小程序,比较了一下numpy.math和Python标准库的math.sin的计算速度:


import time
import math
import numpy as np
x = [i * 0.001 for i in xrange(1000000)]
start = time.clock()
for i, t in enumerate(x):
x[i] = math.sin(t)
print "math.sin:", time.clock() - start
x = [i * 0.001 for i in xrange(1000000)]
x = np.array(x)
start = time.clock()
np.sin(x,x)
print "numpy.sin:", time.clock() - start
# 输出
#math.sin: 0.503613560572
#numpy.sin: 0.0359889705123

在我的电脑上计算100万次正弦值,numpy.sin比math.sin快10倍多。这得利于numpy.sin在C语言级
别的循环计算。numpy.sin同样也支持对单个数值求正弦,例如:numpy.sin(0.5)。不过值得注意的
是,对单个数的计算math.sin则比numpy.sin快得多了,让我们看下面这个测试程序:


x = [i * 0.001 for i in xrange(1000000)]
start = time.clock()
for i, t in enumerate(x):
    x[i] = np.sin(t)
print "numpy.sin loop:", time.clock() - start
# 输出
#numpy.sin loop: 2.84674730553



请注意numpy.sin的计算速度只有math.sin的1/5。这是因为numpy.sin为了同时支持数组和单个值的
计算,其C语言的内部实现要比math.sin复杂很多,如果我们同样在Python级别进行循环的话,就会
看出其中的差别了。此外,numpy.sin返回的数的类型和math.sin返回的类型有所不同,math.sin返
回的是Python的标准float类型,而numpy.sin则返回一个numpy.float64类型

你可能感兴趣的:(python,numpy,标准库对比)