我只能使用 struct.pack
模块将十进制数转换成单精度IEEE754格式的二进制数,或者使用 numpy.frombuffer
将浮点数(float16或float32)转换为二进制数。
但是,是否有可能使用 Numpy 将十进制数转换为半精度浮点数的二进制数呢?
我需要打印出转换后的结果,例如当我输入 "117.0"
时,应该打印出 "0101011101010000"
。
我只能使用 struct.pack
模块将十进制数转换成单精度IEEE754格式的二进制数,或者使用 numpy.frombuffer
将浮点数(float16或float32)转换为二进制数。
但是,是否有可能使用 Numpy 将十进制数转换为半精度浮点数的二进制数呢?
我需要打印出转换后的结果,例如当我输入 "117.0"
时,应该打印出 "0101011101010000"
。
>>> import numpy as np
>>> bin(np.float16(117.0).view('H'))[2:].zfill(16)
'0101011101010000'
.view('H')
方法将占用 float16
值的内存重新解释为无符号整数。
help()
命令,查看相应的docstrings,例如help(''.zfill)
。 - jfs建议按照Mark Dickinson提出的float16
方法,再使用tostring()
方法获取所需的二进制表示:
data = numpy.float16(2.3).tostring()
'{:016b}'.format(struct.unpack('<H', np.float16('117.0').tobytes())[0])
这样的东西,尽管可能有更短的方法来实现这一点。 - Mark Dickinson
np.float16('2.3')
对我来说可以正常工作。你能否澄清你的问题?也许展示一下你尝试的例子会更好理解。 - Mark Dickinsonfloat16
方法不会将数值从十进制转换为二进制。例如,我想要将 100.25(十进制)转换为 IEEE754 半精度的二进制形式,而不是十进制形式。 - Kaio