2012-06-25 66 views
2

我试图读取一个由2字节的浮点数组成的二进制文件,但我似乎无法得到我想要的值。 struct.unpack似乎只适用于4字节的浮动,我不知道除了完全手动完成演员之外还有什么可用的。有没有办法做到这一点?任何帮助将非常感激。半精度(2字节)强制转换为浮点在Python中

+1

啊,https://en.wikipedia.org/wiki/Half-precision_floating-point_format –

+0

本地大小和对齐是使用C编译器的'sizeof'表达式确定的。这总是与本地字节顺序相结合。所以我没有看到你能够用当前的结构模块来做到这一点,除非你扩展它来包含对Half-Precision浮点数的支持。 –

+0

嗯,我知道它可以用numpy完成整个文件: data = np.fromfile(f,dtype ='uint16') data = self.data.reshape((len(self.channel_names), - 1 ),order ='F')。astype('float') 但是,这只适用于整个文件.... – Cenoc

回答

8

您已经通过numpy.fromfile了解了大部分情况。而是使用numpy.frombuffer

>>> np.frombuffer(buffer("\0\0"), dtype=np.float16)[0] 
0.0 
>>> np.frombuffer(buffer("\x00\x3c"), dtype=np.float16)[0] 
1.0 

如果数据具有已知形式,你可以通过创建具有适当布局的D型解析出结构。

+0

它没有'buffer()'工作:'np.frombuffer(b'\ x00 \ x3c',dtype =' jfs

2

你可以将它们填充到4字节的单精度浮点数;还有谁已经做了gruntwork为你的几个人:

他们都解析出的格式转换成它的成分如Wikipedia article on the format所述,将2个字节填充为4个字节的single-pre cision浮动,然后反馈给python结构模块,将其转换为python浮点数。

相关问题