我正在处理大文件操作(超过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为了节省我的时间,我非常感谢对此算法的一些性能提示/另一种方法。提前感谢!
发布于 2020-09-29 08:44:34
对功能的基本分析:时间复杂性: 3_O(n)空间复杂度: 3_O(n)。因为你的循环3次,我的建议是循环一次,使用生成器,这将花费1/3的时间和空间。
我升级了您的代码并使用生成器删除了一些无用的变量:
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)尽情享受
奥利弗
发布于 2020-09-29 08:26:07
您可以通过侧写 (软件)搜索性能问题,但是使用逻辑可能会为您提供更好的服务,它利用了由Python包装的更快的语言。这可能看起来像使用像numpy这样的科学库,使用一些外接功能接口,或者创建和调用一个自定义程序。
更具体地说,Python本身在计算术语上非常慢,因为每个操作都携带着大量的负担(比如臭名昭著的吉尔)。将此工作传递给另一种语言可以使您更少地支付此开销,而不是在每个循环中的每一个可能的点!
科学图书馆至少可以帮你做到这一点。
https://stackoverflow.com/questions/64115289
复制相似问题