2012-06-25 80 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浮點數。

相關問題