首页 > 解决方案 > Python算法提速/性能提示

问题描述

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

 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

我真的很感激一些性能提示/该算法的另一种方法,以节省我一些时间。提前致谢!

标签: pythonlistperformancebinarycpu-speed

解决方案


您可以通过分析软件来寻找性能问题,但使用利用 Python 包装的更快语言的逻辑可能会为您提供很好的服务。这可能看起来像使用像numpy这样的科学库,使用一些FFI(外部函数接口),或者创建和调用自定义程序。

更具体地说,Python 在计算方面本身就非常慢,因为每个操作都带有很多包袱(例如臭名昭​​著的GIL)。将这项工作转移到另一种语言可以让您更少地支付这种间接成本,而不是在每个循环中的每个可能点!

科学图书馆至少可以为您做到这一点

  • 表现得像 Python 逻辑(这对你很友好!),同时每个动作执行许多已知步骤(而不是一次一个)
  • 可能能够矢量化操作(通过在同一处理器步骤中执行许多操作来更多地利用处理时间)

推荐阅读