如何更快地除以2?

2021年5月8日 / 28次阅读 / 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条留言

您的电子邮箱地址不会被公开。 必填项已用*标注

  • 麦新杰

    始终要注意,在python中,int和//操作符的round方式不一样,在具体选择使用时,请测试。 [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top