我試圖讀取一個由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