有没有办法强制numpy.set_printoptions显示确切的浮点值?

Is there a way to force numpy.set_printoptions to show the exact float value?

提问人:Andrew 提问时间:8/1/2021 最后编辑:Mark DickinsonAndrew 更新时间:8/4/2021 访问量:340

问:

在问题 59674518 之后,numpy.set_printoptions有没有办法确保显示确切的浮点值,而不显示尾随零,也不知道先验的值?我已经尝试了所有 4 个浮动模式选项,但无济于事。只是试图理解;没有最终目标。(我认为做不到,如果是这样,什么是理性?只是一个尚不存在的功能?

Mac_3.2.57$python3
Python 3.7.1 (default, Nov  6 2018, 18:45:35) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.set_printoptions(precision=15)
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 11)
array([0.0107421875])
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.278255462646484e-07])
>>> print("%.45f" % (numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)).item(0))
0.000000327825546264648437500000000000000000000
>>> numpy.set_printoptions(floatmode="fixed")
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.278255462646484e-07])
>>> numpy.set_printoptions(floatmode="unique")
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.2782554626464844e-07])
>>> numpy.set_printoptions(floatmode="maxprec")
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.278255462646484e-07])
>>> numpy.set_printoptions(floatmode="maxprec_equal")
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.278255462646484e-07])
>>> numpy.set_printoptions(precision=45,floatmode="fixed")
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.278255462646484375000000000000000000000000000e-07])
>>> numpy.set_printoptions(precision=45,floatmode="unique")
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.2782554626464844e-07])
>>> numpy.set_printoptions(precision=45,floatmode="maxprec")
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.2782554626464844e-07])
>>> numpy.set_printoptions(precision=45,floatmode="maxprec_equal")
>>> numpy.array([22.0], dtype=numpy.float64) / (2 ** 26)
array([3.2782554626464844e-07])
>>> 
python numpy 浮点精度

评论

0赞 Mark Dickinson 8/3/2021
您是否知道打印某些值恰好需要数百位数字?当以定点格式以十进制打印时,精确值为 1076 个字符(如果以科学格式打印,则为 773 个字符)。可悲的是,这个评论框太小了,无法容纳它。4.4501477170144023e-308
0赞 Andrew 8/4/2021
@Mark Dickinson是的,我知道有数百个可能的数字。
0赞 Andrew 8/4/2021
@Mark Dickinson 顺便说一句,4.4501477170144023e-308 是次正常数字的不精确表示。但我明白你的意思。谢谢。
0赞 Lukas S 8/4/2021
@Andrew啊,对不起,谢谢你的启蒙。
0赞 Mark Dickinson 8/4/2021
@Andrew:不准确,是的,但这是正常的,而不是不正常的。假设正在使用 IEEE 754 binary64 浮点格式(非常安全),最接近的精确表示的浮点数(可能最好用十六进制形式表示为 )几乎是最小法线 () 值的两倍。4.4501477170144023e-3080x1.fffffffffffffp-10220x1.0000000000000p-1022

答: 暂无答案