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还是别的什么?
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位值.