每种编程语言和Excel都有异或运算,Python默认的异或运算符号是^,在对二进制大文件进行异或运算时,若对每个字节异或运算,^的运算效率显得十分低下。难道Python的效率永远就是这么低吗?
如何提升Python的异或运算效率,我翻阅了几本教科书都没找到,后来在网上找到参考文章,得知原来numpy库有字节类相关的运算:numpy.bitwise_xor,可以对一个字节整体进行运算,异或运算效率得到极大提升,可谓神来一笔!
以下是我测试的代码:
import time
import numpy
# 异或运算的参数
num=88
# 方法一:逐个字节地进行异或运算并写入文件
def test1():
# 生成一串5MB的随机字节,模拟一个5MB的二进制文件
aa=bytes(numpy.uint8(numpy.random.randint(0, 256, 5*1024*1024)))
now=time.time()
with open('test1.dat','wb') as file:
for i in aa:
file.write(bytes([i^num]))
print(f'方法一用时:{time.time()-now:.2f}s')
# 方法二:用numpy进行整体异或运算,最后才写入文件
def test2():
aa=bytes(numpy.uint8(numpy.random.randint(0, 256, 5*1024*1024)))
now=time.time()
bb=bytearray(numpy.bitwise_xor(bytearray(aa),num))
with open('test2.dat','wb') as file:
file.write(bb)
print(f'方法二用时:{time.time()-now:.2f}s')
if __name__=='__main__':
test1()
test2()
在我的3.8G的CPU台式电脑上运行的结果显示:
方法一用时:2.09秒
方法二用时:0.02秒
效率相差竟然达到瞠目结舌的100+倍!!!