将大字节对象转换为整数列表的更快方法

时间:2019-08-29 00:52:15

标签: python python-3.6

我有一个大字节的对象(来自16位WAVE文件的原始数据(约有800万个样本)),我需要将其转换为整数列表以进行一些处理。到目前为止,我已经使用列表推导和int.from_bytes进行了转换,但是我注意到它花费了大量的时间。我想知道是否有更快的解决方案。

这是我当前的方法:

data = [int.from_bytes(raw[i * sampwidth:((i + 1) * sampwidth)], "little", signed=True) for i in range(len(raw) // sampwidth)]

在我的计算机上,此方法在单个内核上每个文件(我有多个文件)大约需要9秒钟,我想知道我是否正在突破Python的极限,或者是否存在更理想的方法。

2 个答案:

答案 0 :(得分:2)

如果您可以使用scipy(具有许多其他出色的信号处理功能),则可以使用scipy.io.wavefile.read

import scipy.io.wavfile
rate, data_np_ary = scipy.io.wavfile.read('example.wav')

答案 1 :(得分:0)

似乎NumPy确实是要走的路。它已经在一秒钟之内成功加载了所有12个WAVE文件(并进行了简单的立体声到单声道转换)。该代码也更加优雅。该方法的唯一缺点是它仅支持1、2、4和8字节整数,但是由于我正在处理音频数据,因此这不会成为问题。

新的NumPy解决方案:

data = numpy.frombuffer(raw, numpy.int16)