将16位整数转换为32位浮点

hat*_*rix 4 python floating-point integer

我试图将用不同语言编写的代码的一部分(一个名为Igor Pro的Wavemetrics,用于那些你已经听说过它的代码)移植到Python.

在此代码中,数据类型从16位整数(从16位大端二进制文件读入)转换为单精度(32位)浮点.在此计划中,转换如下:

有符号的16位整数:

print tmp
tmp[0]={-24160,18597,-24160,18597,-24160}
Run Code Online (Sandbox Code Playgroud)

转换为32位浮点:

Redimension/S/E=1 tmp
print tmp
tmp[0]={339213,339213,5.79801e-41,0,0}
Run Code Online (Sandbox Code Playgroud)

/S标志/选项表示的数据类型tmp应FLOAT32代替INT16.但是,我认为重要的标志/选项是/E=1,"强制重塑而不转换或移动数据".

在Python中,转换如下:

>>> tmp[:5]
array([-24160,  18597, -24160,  18597, -24160], dtype=int16)

>>> tmp.astype('float32')
array([-24160.,  18597., -24160., ...,  18597., -24160.,  18597.], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

这是我的期望,但我需要找到一个模拟/E=1上面原始代码中的选项的函数/操作.是否有明显的方法将-24160和18597都转换为339213?这是否有什么关系byteswap或者newbyteorder还是别的什么?

Win*_*ert 6

import numpy
tmp=numpy.array([-24160,18597,-24160,18597,-24160, 0], numpy.int16)
tmp.dtype = numpy.float32
print tmp
Run Code Online (Sandbox Code Playgroud)

结果:

[  3.39213000e+05   3.39213000e+05   5.79801253e-41]
Run Code Online (Sandbox Code Playgroud)

我必须在值列表中添加零,因为有奇数个值.它不能将那些解释为32位浮点数,因为有5个16位值.