numpy 可以传递给np.log()的最小值是多少?

f4t66c6m  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(251)

如何找到传递给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
sirbozc5

sirbozc51#

在numpy库中,np.log()函数计算输入的自然对数(以e为底),输入必须是正数,因为负数或零的自然对数没有定义。
可以传递给np.log()的最小正值是Python中可表示的最小正数,大约为2.22e-308,如果你传递一个小于这个值的值给函数,你会得到一个错误,因为这个值不能表示为浮点数。
例如,下面的代码将引发错误,因为传递给np.log()的值太小:

import numpy as np

x = np.finfo(np.float32).eps
print(np.log(x))

这将引发“数学域错误”,因为传递给np.log()的值太小。
值得注意的是,最小正值并不是对数函数的唯一限制,可以传递给对数函数的最大值取决于输入的类型,例如,如果您使用带有非常大值的numpy.log()函数,您可能会得到“溢出”错误。

hfyxw5xn

hfyxw5xn2#

注意,minimum_normal不是NumPy浮点类型中最小的可表示正值。
来源:https://numpy.org/doc/stable/reference/generated/numpy.finfo.html
我想这就是它不起作用的原因。

相关问题