从float32到float16的numpy astype

Nan*_*Nan 6 python floating-point numpy

我想知道如何将numpy从float32强制转换为float16,因为当我使用astype将一些像8193的数字从float32强制转换为float16时,它将输出8192,而将10000的float32强制转换为10000的float16。

import numpy as np
a = np.array([8193], dtype=np.float32)
b = a.astype(np.float16)
Run Code Online (Sandbox Code Playgroud)

PM *_*ing 5

IEEE 754-2008 16位基数2格式(又名binary16)不能给您带来很多精度。您对16位有什么期望?:) 1位是符号位,5位用于指数,剩下10位存储归一化的11位尾数,因此> 2 ** 11 == 2048的任何内容都必须进行量化。

根据Wikipedia的说法,介于4097和8192之间的整数四舍五入为4的倍数,而介于8193和16384之间的整数四舍五入为8的倍数。