在Python中将16位十六进制值转换为FP16?

问题描述 投票:0回答:2

我正在尝试用 python 编写一个基于 FP16 的基本计算器来帮助我调试一些硬件。似乎无法找到如何将 16b 十六进制值转换为浮点值,我可以在代码中使用它来进行数学运算。我看到很多对 numpy 的在线引用,但我认为 float16 构造函数需要一个像 float16("1.2345") 这样的字符串。我想我正在寻找类似 float16("0xabcd") 的东西。

谢谢!

python numpy half-precision-float
2个回答
2
投票

numpy.float16
确实是一种有符号浮点格式,具有 5 位指数和 10 位尾数。

要获取示例的结果:

import numpy as np

np.frombuffer(b'\xab\xcd', dtype=np.float16, count=1)

结果:

array([-22.67], dtype=float16)

或者,展示如何编码和解码另一个示例

1.2345

import numpy as np

a = np.array([1.2345], numpy.float16)
b = a.tobytes()
print(b)
c = np.frombuffer(b, dtype=np.float16, count=1)
print(c)

结果:

b'\xf0<'
[1.234]

如果您确实需要将提供的字符串转换为 FP16:

import numpy as np

s = "0xabcd"
b = int("0xabcd", base=16).to_bytes(2, 'big')
print(b)
c = np.frombuffer(b, dtype=np.float16, count=1)
print(c)

输出:

b'\xab\xcd'
[-22.67]

0
投票

如果有人想知道,上面的答案是不正确的。 我使用它并与 2 个不同的在线工具进行对抗来计算 FP16,并且两者都有相同的不同答案。

我会将任何人发送到此帖子以获取正确答案:

如何在Python中将16位十六进制和二进制表示转换为十进制浮点数(反之亦然)?

如果您有任何疑问,这些是我用来检查答案的工具:

我使用值 0x1C00 和 0x9E00 进行测试。 我希望有人会觉得这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.