当前位置: 首页 > 面试题库 >

在没有numpy的python中分配变量NaN

孔逸春
2023-03-14
问题内容

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


问题答案:

是的-使用math.nan

>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True

在Python 3.5之前,可以使用float("nan")(不区分大小写)。

请注意,检查两个NaN是否彼此相等将始终返回false。部分原因是不能(严格地说)说两个不是数字的事物彼此相等-请参阅所有比较为IEEE754
NaN值返回false的基本原理是什么?
了解更多详细信息。

相反,math.isnan(...)如果需要确定某个值是否为NaN
,请使用。

此外,==在尝试将NaN存储在诸如listdict(或使用自定义容器类型)的容器类型中时,对NaN值进行操作的确切语义可能会引起细微问题。有关更多详细信息,请参见检查容器中是否存在NaN。

您还可以使用Python的十进制模块构造NaN数字:

>>> from decimal import Decimal
>>> b = Decimal('nan')
>>> print(b)
NaN
>>> print(repr(b))
Decimal('NaN')
>>>
>>> Decimal(float('nan'))
Decimal('NaN')
>>> 
>>> import math
>>> math.isnan(b)
True

math.isnan(...) 也可以使用Decimal对象。

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

>>> from fractions import Fraction
>>> Fraction('nan')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\fractions.py", line 146, in __new__
    numerator)
ValueError: Invalid literal for Fraction: 'nan'
>>>
>>> Fraction(float('nan'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\fractions.py", line 130, in __new__
    value = Fraction.from_float(numerator)
  File "C:\Python35\lib\fractions.py", line 214, in from_float
    raise ValueError("Cannot convert %r to %s." % (f, cls.__name__))
ValueError: Cannot convert nan to Fraction.

顺便说一句,您也可以执行float('Inf')Decimal('Inf')math.inf(3.5+)来分配无限数。(另请参阅math.isinf(...)

但是,这样做Fraction('Inf')Fraction(float('inf'))不允许这样做都会抛出异常,就像NaN一样。

如果您想使用一种快速简便的方法来检查数字既不是NaN也不是无限,则可以使用math.isfinite(...)Python
3.2+以上版本。

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

  • cmath.isnan(...)
  • cmath.isinf(...)
  • cmath.isfinite(...) (Python 3.2及更高版本)
  • cmath.nan(Python 3.6及更高版本;等效于complex(float('nan'), 0.0)
  • cmath.nanj(Python 3.6及更高版本;等效于complex(0.0, float('nan'))
  • cmath.inf(Python 3.6及更高版本;等效于complex(float('inf'), 0.0)
  • cmath.infj(Python 3.6及更高版本;等效于complex(0.0, float('inf'))


 类似资料:
  • 问题内容: 我刚刚遇到了这段代码 并且认为, 必须 有一个比用无限循环更好的方法。 所以我尝试了: 显然有一个错误。 有什么方法可以避免在那种情况下使用? 编辑: 理想情况下,您要避免重复说两次…恕我直言,重复甚至比a还要糟糕,尤其是在语句很复杂的情况下。 问题答案: 如果您不对数据做任何奇特的事情,例如以后再阅读更多行,总会有:

  • 问题内容: 好的。所以我的问题很简单:如何在Python中使用eval分配变量的值?我试过了,但是那行不通。它返回一个SyntaxError。为什么不起作用? 问题答案: 因为是语句,而不是表达式。使用运行语句。 顺便说一下,有许多方法可以避免使用/,如果您只需要分配一个动态名称,例如可以使用字典,函数, 或 字典 : 更新 :尽管上面的代码在REPL中可以使用,但在函数内部则无法使用。如果没有其

  • 问题内容: 将数学应用于变量的常用方法是 是否可以像这样计算和操纵两个操作数? 然后我该如何连接op和两个变量以及? 我知道我可以比较运到,,,,然后分配和计算.... 但是我可以做些什么,如何告诉编译器op是运算符? 问题答案: 您可以使用运算符模块和字典:

  • 问题内容: 我试图在这里一次正常地问一个问题,但是没人知道我想问什么。因此,我在PHP中找到了示例。 PYTHON中有没有像extract()这样的函数? 因此,字典也是如此: ps为什么我要这样做:当您处于类方法中时,当string为self.data [‘raw’] [‘code’]时,很难对join()和format()中的字符串进行6种操作(假设这是这里的字典) 问题答案: 好的php兄弟

  • 问题内容: Python在一行中实际上分配多个变量的实际步骤是什么? 我过去经常做A [0],A [1] = A [1],A [0]交换,但是最近我在分配链接列表时遇到了一个错误。 变得早于我的预期,所以分配成为 但是,如果我这样做 有用! 我“假设”步骤是 不 那么,这些步骤是什么? 问题答案: Python中有一种叫做“扩展分配”的东西。 长话短说,您可以通过任务扩展迭代。例如,以下代码评估并

  • 问题内容: 如何使用Swift在一行中分配多个变量? 问题答案: 你不知道 这是一种语言功能,可以防止赋值的标准不良副作用返回值,如Swift书中所述: 与C和Objective-C中的赋值运算符不同,Swift中的赋值运算符本身并不返回值。以下语句无效: 此功能可防止在实际需要等于运算符()时偶然使用赋值运算符()。通过使其无效,Swift可帮助您避免代码中的此类错误。 因此,这有助于防止此极其