我试图读取一个由2字节的浮点数组成的二进制文件,但我似乎无法得到我想要的值。 struct.unpack似乎只适用于4字节的浮动,我不知道除了完全手动完成演员之外还有什么可用的。有没有办法做到这一点?任何帮助将非常感激。半精度(2字节)强制转换为浮点在Python中
2
A
回答
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 ='
2
你可以将它们填充到4字节的单精度浮点数;还有谁已经做了gruntwork为你的几个人:
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个字节的single-pre cision浮动,然后反馈给python结构模块,将其转换为python浮点数。
相关问题
- 1. 在Swift中将半精度浮点数(字节)转换为浮点数
- 2. 从单精度浮点表示转换为半精度浮点数
- 3. 在C++中将int转换为16位浮点数(半精度浮点数)
- 4. 转换单精度浮点到半精度MIPS
- 5. 将c#float转换为IEEE单精度浮点字节
- 6. JAVA /如何将2字节浮点数转换为双精度值
- 7. 十进制到半精度浮点数
- 8. 在Python中控制浮点精度
- 9. 将双精度转换为浮点数
- 10. 将8字节的小端二进制转换为双精度浮点型
- 11. 如何将字节转换为Swift中的半浮点数?
- 12. java-IBM-IEEE双精度浮点字节转换
- 13. 双精度浮点数如何转换为单精度浮点格式?
- 14. Python:强制json中的浮点数的精度?
- 15. 子类浮强制定点印刷精度在Python
- 16. python中的浮点精度
- 17. Python 2字节二进制数组转换为整数或浮点数
- 18. 如何将单精度浮点数转换为十进制?
- 19. C# - 将双精度值转换为[8字节IEEE浮点]并返回
- 20. 将字符串转换为精度浮点数
- 21. 高效的功能,浮点/双精度转换为字符串
- 22. 显式强制转换为int并隐式强制转换为浮点型
- 23. 将字节转换为浮点值
- 24. 将2个字节或3个字节转换为C中的浮点型号
- 25. 将字符中的浮点数转换为浮点数(PYTHON)
- 26. 将浮点数转换为某个精度,然后复制到字符串
- 27. 如何将十六进制字符串转换为单精度浮点数
- 28. 将字符串转换为浮点或双精度值更改十进制值
- 29. Unity3d浮点精度限制
- 30. 限制浮点精度?
啊,https://en.wikipedia.org/wiki/Half-precision_floating-point_format –
本地大小和对齐是使用C编译器的'sizeof'表达式确定的。这总是与本地字节顺序相结合。所以我没有看到你能够用当前的结构模块来做到这一点,除非你扩展它来包含对Half-Precision浮点数的支持。 –
嗯,我知道它可以用numpy完成整个文件: data = np.fromfile(f,dtype ='uint16') data = self.data.reshape((len(self.channel_names), - 1 ),order ='F')。astype('float') 但是,这只适用于整个文件.... – Cenoc