从字符串到numpy.int16数组的快速转换

时间:2014-02-09 22:34:28

标签: python arrays numpy bit-manipulation type-conversion

我读取(int)32位音频data(由前面的命令作为字符串给出)到numpy.int32数组中:

myarray = numpy.fromstring(data, dtype=numpy.int32)

但是我希望将它作为int16存储在内存中(我知道这会降低位深度/分辨率/音质):

myarray = myarray >> 16
my_16bit_array = myarray.astype('int16')

效果很好,但是:有更快的解决方案吗?(这里我使用:字符串缓冲区,int32中的1个数组,int16中的1个数组;我想知道是否可以保存一步)

1 个答案:

答案 0 :(得分:2)

这个怎么样?

np.fromstring(data, dtype=np.uint16)[0::2]

但请注意,在使用numpy时,此处描述的类型的开销很常见,并且无法始终避免。如果您的应用程序无法接受此类开销,请确保提前计划为性能关键部件编写扩展模块。

注意:它应该是0 :: 2或1 :: 2,具体取决于平台的字节顺序