首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python算法加速/性能提示

Python算法加速/性能提示
EN

Stack Overflow用户
提问于 2020-09-29 08:01:11
回答 2查看 92关注 0票数 0

我正在处理大文件操作(超过2Gb),我有很多处理函数来处理数据。我的问题是,完成这个过程需要很多时间。从所有功能来看,似乎需要更长时间的是这个:

代码语言:javascript
复制
 def BinLsb(data):
        Len = len(data)
        databin = [0] * (int(Len))
        num_of_bits = 8
        ###convert to bin the octets and LSB first
        for i in range(Len):
            newdatabin = bin(int(data[i], 16))[2:].zfill(num_of_bits)[::-1]
            databin[i] = newdatabin
        ###group the 14bit and LSB again
        databin = ''.join(databin)
        composite_list = [databin[x:x + 14] for x in range(0, len(databin), 14)]
        LenComp = len(composite_list)
        for i in range(LenComp):
            composite_list[i] = (int(str(composite_list[i])[::-1], 2))
        return composite_list

为了节省我的时间,我非常感谢对此算法的一些性能提示/另一种方法。提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-29 08:44:34

对功能的基本分析:时间复杂性: 3_O(n)空间复杂度: 3_O(n)。因为你的循环3次,我的建议是循环一次,使用生成器,这将花费1/3的时间和空间。

我升级了您的代码并使用生成器删除了一些无用的变量:

代码语言:javascript
复制
def binLsb(data):
    databin = ""
    num_of_bits = 8
    for i in range(len(data)):
        newdatabin = bin(int(data[i], 16))[2:].zfill(num_of_bits)[::-1]
        while len(str(databin)) > 14:
            yield (int(str(databin[:14])[::-1], 2))
            databin = databin[14:]
        databin += str(newdatabin)

尽情享受

奥利弗

票数 0
EN

Stack Overflow用户

发布于 2020-09-29 08:26:07

您可以通过侧写 (软件)搜索性能问题,但是使用逻辑可能会为您提供更好的服务,它利用了由Python包装的更快的语言。这可能看起来像使用像numpy这样的科学库,使用一些外接功能接口,或者创建和调用一个自定义程序。

更具体地说,Python本身在计算术语上非常慢,因为每个操作都携带着大量的负担(比如臭名昭著的吉尔)。将此工作传递给另一种语言可以使您更少地支付此开销,而不是在每个循环中的每一个可能的点!

科学图书馆至少可以帮你做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64115289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档