这只是一个一般性的问题,关于在使用这两种不同的数据类型时,我应该期待什么样的运行时差异。
我的测试:
test = [100.0897463, 1.099999939393,1.37382829829393,29.1937462874847272,2.095478262874647474]
test2 = [decimal.Decimal('100.0897463'), decimal.Decimal('1.09999993939'), decimal.Decimal('1.37382829829'), decimal.Decimal('29.1937462875'), decimal.Decimal('2.09547826287')]
def average(numbers, ddof=0):
return sum(numbers) / (len(numbers)-ddof)
%timeit average(test)
%timeit average(test2)
运行时的区别是:
1000000个环路,最好为3:364 ns/环路
10000圈,最好为3圈:80.3微秒/圈
所以使用decimal要比使用float慢200倍。这种类型的差异是否正常,是否与我在决定使用哪种数据类型时所期望的一致?
根据您看到的时间差,您可能使用的是Python 2.x。在python2.x中,
decimal
模块是用Python编写的,速度相当慢。从Python3.2开始,重写的decimal
模块是C语言的,速度要快得多。在我的系统上使用Python 2.7,
decimal
模块的速度大约慢180倍。使用Python 3.5,decimal
模块的速度只有~2.5倍。如果您关心
decimal
性能,那么Python 3要快得多。使用
float
可以获得更好的速度,因为Pythonfloat
在可用时使用硬件浮点寄存器(并且它在现代计算机上可用),而Decimal
使用完全标量/软件实现。但是,当
Decimal
类型存在典型的浮点精度问题时,可以更好地控制Decimal
。例如,请参见经典的StackOverflow Q&AIs floating point math broken?。相关问题 更多 >
编程相关推荐