如何找到传递给numpy.log()并得到非NaN结果的最小(实的、正的)float32值?
我本以为finfo(np.float32)
返回的tiny
值会起作用,但它没有起作用:
>>> float_info = np.finifo(np.float32)
>>> float_info.tiny
1.1754944e-38
>>> np.log(float_info.tiny)
nan
更新:
投票结束--我打错了。np.log(float_info.tiny)
返回-87.33655,而不是NaN:
>>> float_info = np.finifo(np.float32)
>>> float_info.tiny
1.1754944e-38
>>> np.log(float_info.tiny)
-87.33655
2条答案
按热度按时间sirbozc51#
在numpy库中,np.log()函数计算输入的自然对数(以e为底),输入必须是正数,因为负数或零的自然对数没有定义。
可以传递给np.log()的最小正值是Python中可表示的最小正数,大约为2.22e-308,如果你传递一个小于这个值的值给函数,你会得到一个错误,因为这个值不能表示为浮点数。
例如,下面的代码将引发错误,因为传递给np.log()的值太小:
这将引发“数学域错误”,因为传递给np.log()的值太小。
值得注意的是,最小正值并不是对数函数的唯一限制,可以传递给对数函数的最大值取决于输入的类型,例如,如果您使用带有非常大值的numpy.log()函数,您可能会得到“溢出”错误。
hfyxw5xn2#
注意,minimum_normal不是NumPy浮点类型中最小的可表示正值。
来源:https://numpy.org/doc/stable/reference/generated/numpy.finfo.html
我想这就是它不起作用的原因。