为什么执行
g = np.float16([4.4,4.6])
我得到了一些不同的
g = [4.3984..., 4.6015...].
它会以某种方式影响矩阵的计算吗?我可以在不更改数据类型的情况下更改此行为吗?谢谢
首先,必须将float16
强制转换回float
才能得到结果。不过,你不会得到不同的结果,这就是实际价值。
无论精度如何,都不能用浮点数表示4.4
、0.3
和许多其他有理数。Python本身不存储4.4
:
>>> f"{4.4}"
'4.4'
>>> f"{4.4:.15f}"
'4.400000000000000'
>>> f"{4.4:.20f}"
'4.40000000000000035527'
4.4
打印为4.4
的原因是15是根据IEEE 754浮点数标准的默认打印精度。
使用较小的类型会增加错误:
>>> f"{np.float64(4.4):.20f}"
'4.40000000000000035527'
>>> f"{np.float32(4.4):.20f}"
'4.40000009536743164062'
>>> f"{np.float16(4.4):.20f}"
'4.39843750000000000000'
NumPy