2021年5月8日 / 102次阅读 / Last Modified 2021年5月8日
数值计算
python中的除法,/,固定得到一个float对象,不管是否能够除尽。因此,在能够除尽的情况下,要使用int来将结果转换成整数对象,这很慢!
在Python中,更快的计算方式可以是:
1, 在除数为2的时候,使用位移;
2, 使用 // 取商操作。
在除数为2的时候,这3个操作是等价的,看如下测试代码:
>>> for i in range(1000000):
... a = i >> 1
... b = int(i/2)
... c = i // 2
... assert a==b==c
...
>>>
没有assert!
现在看速度:
$ python3 -m timeit -p 'int(123/2)'
5000000 loops, best of 5: 61.8 nsec per loop
$ python3 -m timeit -p '123 >> 1'
50000000 loops, best of 5: 5.98 nsec per loop
$ python3 -m timeit -p '123 // 2'
50000000 loops, best of 5: 5.96 nsec per loop
一目了然,除以2,不要再使用int转了,慢10倍!
int(123/2),python首先创建一个float对象,用来存储123/2的结果,然后再使用int函数,将float对象变成int对象,此过程又一次创建了一个int对象。这就是慢的原因!
补充:在除数不是2的时候,确保能够除尽,或者只对商感兴趣,请使用 // 操作符!
-- EOF --
本文链接:https://www.pynote.net/archives/3647
《如何更快地除以2?》有1条留言
前一篇:用exec实现批量创建变(常)量
后一篇:Python中的内存泄露
©Copyright 麦新杰 Since 2019 Python笔记
始终要注意,在python中,int和//操作符的round方式不一样,在具体选择使用时,请测试。 [ ]