2016-05-25 17 views
1

私はpython 2.7を使用しています。 Bytearrayを2バイトの浮動小数点数に変換する方法はちょっと不思議です。 ByteArrayのは、次のとおりです。bytearrayを浮動小数点に変換するためのPythonの使用

In[13]: temp 
Out[13]: `bytearray(b'\xd8[\xda[\xd8[\xda[\xd1[\xe1[\xeb[\xed[\xe7[\xeb[\xe7[\xea[\xd6[\xd5[\xd8[\xd5[\xd4[\xd3[\xe9[\xe2[\xe3[\xe5[\xe6[\xe8[\xdc[\xe6[\xe4[\xe4[\xe8[\xe2[\xd3[\xdb[\xd1[\xda[\xda[\xd7[\xd1[\xd1[\xdf[\xd1[\xd4[\xdd[\xe6[\xdd[\xe3[\xe4[\xdf[\xe1[\xd0[\xd4[\xd7[\xd6[\xd7[\xd4[\xdf[\xdd[\xe0[\xe5[\xe0[\xdf[\xe0[\xdd[\xdd[\xe3[\xdc[\xde[\xd8[\xe0[\xde[\xdf[\xde[\xe2[\xe7[\xe2[\xe2[\xea[\xe1[\xe0[\xda[\xd4[\xd9[\xdb[\xd9[\xdd[\xe1[\xe3[\xe3[\xe2[\xe3[\xe7[\xe1[\xe5[\xe2[\xe8[\xe4[\xe3[')` 

はリトルエンディアン形式で96の浮動小数点数に変換したい、バイト1は、LSBとバイト0はMSBです。

+1

、しかし、あなたはそのバイト0を指定するにされますビッグエンディアンである最上位バイト。より正確な説明を提供できますか? – user2357112

+0

バイト文字列は14バイトです。 Pythonでは、 'float'の標準サイズは4バイトですが、' double'は8バイトです。あなたのデータは 'float'や' double'の数には当てはまりません。 –

+0

16ビット精度の浮動小数点が必要ですか?これらのように? https://en.wikipedia.org/wiki/Half-precision_floating-point_format – jsbueno

答えて

1

あなたはnumpyfromstringを使用することができます。

import numpy as np 

# little-endian 
x = np.fromstring(buffer(temp), dtype='<f2') 

# big-endian 
x = np.fromstring(buffer(temp), dtype='>f2') 

あなたは、通常のフロートが必要な場合は、フロートにnp.float16を変換することができます:あなたはリトルエンディアンを言う

# one value 
float(x[0]) 

# all values 
[float(a) for a in x] 

# see user2357112 comments for other options 
+1

NumPy配列を標準的なPythonスカラーのリストに変換したい場合、 'tolist'メソッドは一般的により頑強で効率的です。 NumPyの倍精度浮動小数点数の配列を通常の倍精度浮動小数点数の配列に変換する場合は、 'astype(float)'を使用します。 – user2357112

関連する問題