Python的numpy库大幅提升xor异或运算的效率

每种编程语言和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+倍!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值