Преобразовать массив данных типа float32 в шестнадцатеричный формат - PullRequest
2 голосов
/ 01 мая 2019

Я хочу преобразовать пустой массив, который имеет тип данных float32, в его эквивалентный шестнадцатеричный формат в Python 3.

Это реализация, которую я пробовал, но она не работает:

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 голосов
/ 01 мая 2019

‘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. ]))
0 голосов
/ 01 мая 2019

Тип Python float имеет встроенный метод .hex().В программе форматирования вы можете использовать лямбду, чтобы сначала привести значение к 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...