Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将float32数据类型的numpy数组转换为十六进制格式_Python_Python 3.x_Numpy_Data Conversion - Fatal编程技术网

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

Python 将float32数据类型的numpy数组转换为十六进制格式,python,python-3.x,numpy,data-conversion,Python,Python 3.x,Numpy,Data Conversion,我想在Python3中将一个numpy数组(float32数据类型)转换为其等效的十六进制格式 这是我尝试过的实现,但似乎不起作用: import numpy as np np.set_printoptions(formatter={'float':hex}) np.array([1.2,3.4,2.6,2.1], dtype = np.float32) Python的float类型有一个内置的.hex()方法。在格式化程序中,可以使用lambda首先将值强制转换为float,然后调用.he

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

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

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


Python的
float
类型有一个内置的
.hex()
方法。在格式化程序中,可以使用lambda首先将值强制转换为
float
,然后调用
.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]
“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')

创建包含十六进制值的新列表效率低下,在这里是不必要的。OP只想更改现有列表的格式以便于显示。如果需要,只需添加“fromhex()”。我指的是第一个数组,
np\u arr\u hex
。根本不需要创建它。原始数组可以使用
np.set\u printoptions()
直接格式化为十六进制。
(array(['0x1.3333340000000p+0', '0x1.b333340000000p+1',
    '0x1.4ccccc0000000p+1', '0x1.0ccccc0000000p+1',
    '0x1.e000000000000p+3', '0x1.4000000000000p+3'], dtype='<U20')
array([ 1.2,  3.4,  2.6,  2.1, 15. , 10. ]))