Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中不使用numpy分配变量NaN_Python_Constants_Nan - Fatal编程技术网

在python中不使用numpy分配变量NaN

在python中不使用numpy分配变量NaN,python,constants,nan,Python,Constants,Nan,大多数语言都有一个NaN常量,可以用来为变量赋值NaN。python不使用numpy可以做到这一点吗?使用float(“nan”): 是的,用 在Python3.5之前,可以使用float(“nan”)(不区分大小写) 注意,检查两个NaN是否相等总是返回false。这在一定程度上是因为两个“不是数字”的事物不能(严格地说)被称为彼此相等——有关更多详细信息和信息,请参阅 相反,如果需要确定值是否为NaN,请使用 此外,当尝试在容器类型(如list或dict)中存储NaN时(或在使用自定义容器类

大多数语言都有一个NaN常量,可以用来为变量赋值NaN。python不使用numpy可以做到这一点吗?

使用
float(“nan”)

是的,用

在Python3.5之前,可以使用
float(“nan”)
(不区分大小写)

注意,检查两个NaN是否相等总是返回false。这在一定程度上是因为两个“不是数字”的事物不能(严格地说)被称为彼此相等——有关更多详细信息和信息,请参阅

相反,如果需要确定值是否为NaN,请使用

此外,当尝试在容器类型(如
list
dict
)中存储NaN时(或在使用自定义容器类型时),NaN值上的
=
操作的确切语义可能会导致微妙的问题。有关更多详细信息,请参阅


您还可以使用Python的模块构造NaN编号:

math.isnan(…)
也适用于十进制对象


但是,您不能在Python的模块中构造NaN数字:

>>从分数导入分数
>>>分数('nan')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python35\lib\fractions.py”,第146行,在新的__
分子)
ValueError:分数“nan”的文字无效
>>>
>>>分数(浮点('nan'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python35\lib\fractions.py”,第130行,在新的__
值=分数。来自浮点数(分子)
文件“C:\Python35\lib\fractions.py”,第214行,from\u float
raise VALUERROR(“无法将%r转换为%s.”%(f,cls.\uuuuu名称)
ValueError:无法将nan转换为分数。

顺便说一句,您也可以使用
float('Inf')
Decimal('Inf')
,或(3.5+)来分配无限数。(另请参阅)

但是,不允许执行
Fraction('Inf')
Fraction(float('Inf'))
操作,这将引发异常,就像NaN一样

如果需要一种快速简便的方法来检查数字是否既不是NaN也不是无穷大,那么可以使用Python 3.2+中的as


如果要对复数执行类似的检查,则
cmath
模块包含与
math
模块类似的一组函数和常量:

  • (Python 3.2+)
  • (Python 3.6+;相当于
    complex(float('nan'),0.0)
  • (Python 3.6+;相当于
    complex(0.0,float('nan'))
  • (Python 3.6+;相当于
    complex(float('inf'),0.0)
  • (Python 3.6+;相当于
    complex(0.0,float('inf'))
您可以执行
float('nan')
获得nan

nan = float('nan')
现在有了常数,
nan

同样,您也可以为decimal.decimal.创建NaN值:

dnan = Decimal('nan')
您可以从“inf-inf”中获取NaN,也可以从大于2e308的数字中获取“inf”,因此,我通常使用:

>>> inf = 9e999
>>> inf
inf
>>> inf - inf
nan
生成inf和-inf的一种更一致(且不那么不透明)的方法是再次使用float():

请注意,浮点的大小取决于体系结构,因此最好避免使用像9e999这样的幻数,即使这可能有效

import sys
sys.float_info
sys.float_info(max=1.7976931348623157e+308,
               max_exp=1024, max_10_exp=308,
               min=2.2250738585072014e-308, min_exp=-1021,
               min_10_exp=-307, dig=15, mant_dig=53,
               epsilon=2.220446049250313e-16, radix=2, rounds=1)

C、C++、爪哇、C、OCAML是许多语言的一部分。它是自C99起在
math.h
中定义的常数。(我认为将该语言的最新标准化版本称为该语言是公平的,因此“C”是C11。)(参见);在C++中,也有代码< No>代码>,还有代码< >()>代码>,代码> nff()/代码>,<代码> nLL()/Cuth>,尽管我对它们所做的事情有点不确定。code>double.NaN在Java中,double.NaN在C#中……这个答案被不合理地否决了。我在.txt文件中编写了许多小的解析测试,并使用ast.literal\u eval获得预期的输出部分。这里不可能调用float('nan'),这个答案对我很有帮助。请注意,使用float('nan')比使用np.nan慢3倍,大约是指定nan=float('nan')一次,然后在所有后续赋值中使用变量'nan'慢6.5倍(如abarnert的答案所示)。这是多个nan赋值的最有效答案:即,仅使用浮点('nan')一次,然后对所有剩余赋值使用分配的常量。但是,如果您只执行一个或两个nan total赋值,那么使用numpy.nan是最快的。
nan = float('nan')
dnan = Decimal('nan')
>>> inf = 9e999
>>> inf
inf
>>> inf - inf
nan
>> positive_inf = float('inf')
>> positive_inf
inf
>> negative_inf = float('-inf')
>> negative_inf
-inf
import sys
sys.float_info
sys.float_info(max=1.7976931348623157e+308,
               max_exp=1024, max_10_exp=308,
               min=2.2250738585072014e-308, min_exp=-1021,
               min_10_exp=-307, dig=15, mant_dig=53,
               epsilon=2.220446049250313e-16, radix=2, rounds=1)