我正在尝试读取一个包含 2 字节浮点数的二进制文件,但我似乎无法获得我想要的值。struct.unpack 似乎只适用于 4 字节浮点数,我不确定除了完全手动进行强制转换之外还有什么可用的。有没有办法做到这一点?任何帮助将不胜感激。
问问题
9520 次
2 回答
11
你已经掌握了大部分的方法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
如果数据具有已知形式,您可以通过创建具有适当布局的 dtype 来解析结构。
于 2012-06-25T14:28:34.990 回答
2
您可以将它们填充为 4 字节单精度浮点数;有几个人已经为您完成了繁重的工作:
http://davidejones.com/blog/1413-python-precision-floating-point/
http://fpmurphy.blogspot.no/2008/12/half-precision-floating-point-format_14.html
他们都将格式解析为它的组成部分,如Wikipedia article on the format 中所述,将 2 个字节填充为 4 个字节的单精度浮点数,然后将其反馈给 python struct 模块以将其转换为 python 浮点数。
于 2012-06-25T14:02:02.370 回答