将float32数据类型的numpy数组转换为十六进制格式

时间:2019-05-01 16:17:11

标签: python python-3.x numpy data-conversion

我想在Python 3中将一个float32数据类型的numpy数组转换为其等效的十六进制格式。

这是我尝试过的实现,但似乎不起作用:

import numpy as np
np.set_printoptions(formatter={'float':hex})
np.array([1.2,3.4,2.6,2.1], dtype = np.float32)

2 个答案:

答案 0 :(得分:0)

Python的float类型具有内置的.hex()方法。在格式化程序中,您可以使用lambda首先将值转换为float,然后调用.hex()

np.set_printoptions(formatter={'float':lambda x:float(x).hex()})

对于以下数组:

arr = np.array([1.2,3.4,2.6,2.1], dtype = np.float32)
print(arr)

输出为:

[0x1.3333340000000p+0 0x1.b333340000000p+1 0x1.4ccccc0000000p+1
 0x1.0ccccc0000000p+1]

答案 1 :(得分:0)

‘float.hex()’方法用于将浮点数转换为其十六进制值。同样,我们可以使用‘float.fromhex()’方法将十六进制字符串值转换为其浮点表示形式。 ‘hex()’是实例方法,而‘fromhex()’是类方法。

下面的代码将为您提供帮助。

#define numpy array
np_arr = np.array([1.2,3.4,2.6,2.1,15,10], dtype = np.float32)

#convert numpy array to hex
np_arr_hex = np.array([float.hex(float(x)) for x in np_arr])

#back to float with upto 4 decimal places
np_arr_float = np.array([round(float.fromhex(x),1) for x in np_arr_hex])

#print both arrays
np_arr_hex,np_arr_float

输出:

np_arr_hex

(array(['0x1.3333340000000p+0', '0x1.b333340000000p+1',
    '0x1.4ccccc0000000p+1', '0x1.0ccccc0000000p+1',
    '0x1.e000000000000p+3', '0x1.4000000000000p+3'], dtype='<U20')

np_arr_float

array([ 1.2,  3.4,  2.6,  2.1, 15. , 10. ]))