这可能是一个简单的问题,但我无法在一个地方获得所有答案,所以欢迎任何帮助和答案:)。我正在尝试调试程序,但后来我意识到我不知道在python中可能导致NAN值的所有可能操作是什么。所以这里有一个问题是什么所有可能的操作会导致python特别是numpy矩阵中的nan值?
一个例子就像
x=float('nan')
x=x+x
print x
结果
nan
答案 0 :(得分:0)
NaNs是IEEE 754标准的一部分。操作类似于但不限于inf * 0,inf / inf或涉及NaN的任何操作,例如, nan * 1,返回NaN。
答案 1 :(得分:0)
在崎岖不平的土地上,你经常会因非法数学操作而获得nan
s。考虑
>>> from math import asin
>>> asin(1.1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
numpy中的类似操作会产生一个nan:
>>> from numpy import arcsin
>>> arcsin(1.1)
__main__:1: RuntimeWarning: invalid value encountered in arcsin
nan
请注意,通过(python&#39; s)默认情况下,您只会收到一次警告。
调试时,查找非法操作,esp域错误:除以零,负数的平方根等。
nans的第二个主要来源是inf / inf,0 / 0,0 * inf等形式的不确定表达式。
最后,由于nans是粘性的(一旦你在表达式中有第一个nan,它会传播),在调试时你通常需要找到第一个操作,这会导致混乱。