python 中 infinity(inf-无穷)、Nan(not a number)和None

博客介绍了Python中正无穷或负无穷(inf)、非数字(Nan)的表示及特性。inf用float(\inf\)等表示,比较时有特殊规则,简单运算多仍得无穷;Nan由特定运算产生,相关计算无法得数字。还提及了None与Nan,以及处理Nan的加法忽略和统计个数等情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、inf

python中的正无穷或负无穷,使用float("inf")或float("-inf")来表示。
这里有点特殊,写成:float("inf"),float("INF")或者float('Inf')都是可以的。
当涉及 > 和 < 比较时,所有数都比无穷小float("-inf")大,所有数都比无穷大float("inf")小。
相等比较时,float("+inf")与float("+inf")、float("inf")三者相等

无穷的一些类似加减乘除的简单操作还是得到无穷;

2、Nan

0 * float('inf') 结果为:nan
float('inf') / float('inf') 结果为:nan
float('inf') - float('inf') 结果为:nan
float('-inf') - float('-inf') 结果也为:nan

nan代表Not A Number(不是一个数),它并不等于0
因为nan不是一个数,所以相关计算都无法得到数字。
所有涉及nan的操作,返回的都是nan。

a = float("inf")
b = float("inf")
c = a*0  # get Nan
d = b*0  # get Nan

print(a is b)
print(c is d)


False
False
a = float("inf")
b = float("inf")
c = a*0  # get Nan
d = b*0  # get Nan

print(a == b)
print(c == d)
print(c != d)
print(math.isinf(a))
print(math.isnan(c))


True
False
True
True
True

3、None 与 Nan

In [8]: None == None
Out[8]: True
 
In [4]: np.nan == np.nan
Out[4]: False
In [5]: type(np.nan)
Out[5]: float
In [6]: type(None)
Out[6]: NoneType

4、处理Nan的几种情况

加法,忽略Nan

In [7]: np.nansum([11,np.nan,123])
Out[7]: 134.0

统计Nan的个数,利用Nan本身不等于本身

In [9]: a = np.array([1,2,3,4,np.nan,5,np.nan,np.nan])
 
In [10]: a
Out[10]: array([  1.,   2.,   3.,   4.,  nan,   5.,  nan,  nan])
 
In [11]: np.count_nonzero(a != a)
Out[11]: 3


 



 

<think>我们正在回答用户的问题:“Python中如何表示极大值?” 根据引用[3]的内容,我们知道在Python 3中,整数不再有大小限制(仅受限于内存),因此实际上不需要表示“最大整数”。但有时在算法中(例如初始化最小值变量)可能需要一个理论上比所有数都大的值。 引用[3]提到,sys.maxsize可以用来表示一个大于任何实际工作中能表示的整数的值(实际上它是系统指针大小的最大值,通常是2**31-1或2**63-1)。但注意,这并不是真正的“无穷大”,而是一个很大的整数。 另外,Python中有一个特殊的浮点数值`float('inf')`表示正无穷大,它比任何有限数字都大。但注意,它只能用于浮点数比较,整数也可以它比较(因为整数在比较时会自动转换为浮点数)。 因此,我们可以提供两种方式: 1. 对于整数,我们可以使用`sys.maxsize`(但注意它并不是无限大,只是足够大)或者使用`float('inf')`(但这样会转换为浮点数比较,可能不是用户想要的)。 2. 如果用户需要的是数学意义上的极大值(无穷大),那么可以使用`float('inf')`。 另外,在算法中,有时我们也会用`None`来初始化,然后通过条件判断,但这不是表示极大值。 根据引用[3]的说明,我们总结如下: 步骤: 1. 导入sys模块(如果需要使用sys.maxsize) 2. 根据使用场景选择: - 如果需要初始化一个整数变量,使其比实际可能出现的整数都大,可以使用`sys.maxsize`。 - 如果不需要区分整数浮点数,或者需要无穷大的概念,可以使用`float('inf')`。 示例代码: 使用sys.maxsize: import sys max_int = sys.maxsize 使用无穷大: infinity = float('inf') 注意:在Python中,整数可以任意大,所以没有最大整数的概念。sys.maxsize实际上是当前平台指针大小所能表示的最大整数(例如32位平台上是2**31-1,64位平台上是2**63-1),它通常用于索引容器大小限制。 另外,如果用户需要的是最小的整数,那么可以使用`-sys.maxsize-1`(最小的负整数)或者`float('-inf')`(负无穷大)。 因此,回答用户的问题,我们需要根据用户的实际场景来推荐。 结构: 1. 介绍整数在Python3中无限制,但有时需要极大值用于比较。 2. 提供两种方法:sys.maxsize float('inf'),并解释它们的区别适用场景。 3. 给出示例代码。 4. 注意事项。 同时,根据引用[1]中关于Python数据类型的描述,我们可以提到Python的数据类型灵活性使得整数浮点数可以混合比较,但要注意类型转换。 最后,生成相关问题。 注意:引用[1][2][3][4]中,我们主要参考了引用[3]的内容,所以引用标识放在引用[3]处。 回答:</think>### Python中表示极大值的方法 在Python中表示极大值主要有两种方式,具体选择取决于使用场景: #### 1. **整数极大值表示** 在Python 3中,整数不再有固定大小限制(仅受内存约束),但可通过`sys.maxsize`表示实际系统支持的最大索引值(通常为$2^{63}-1$或$2^{31}-1$): ```python import sys max_size = sys.maxsize print(f"系统支持的最大索引值: {max_size}") # 64位系统输出: 9223372036854775807 ``` #### 2. **浮点数极大值表示** 使用`float('inf')`表示数学意义上的正无穷大: ```python infinity = float('inf') print(infinity > 10**100) # 输出: True print(infinity + 1000) # 输出: inf ``` #### 3. **特殊场景用法** | 场景 | 推荐方法 | 示例 | |---------------------|----------------------|----------------------------| | 算法初始化最小值 | `float('inf')` | `min_val = float('inf')` | | 索引边界判断 | `sys.maxsize` | `if index < sys.maxsize:` | | 科学计算中的无穷大 | `np.inf` | `import numpy as np; np.inf` | | 自定义极大值约束 | 显式定义常量 | `MAX_VALUE = 10**18` | #### 4. **注意事项** - `sys.maxsize` 不是理论最大整数(Python整数无上限),而是**容器索引的最大值**[^3] - `float('inf')` 遵循IEEE 754标准,参与运算时保持数学特性: ```python print(1 / float('inf')) # 0.0 print(float('inf') * 0) # nan (非数字) ``` - 整数与无穷大可直接比较: ```python print(10**1000 < float('inf')) # True ``` #### 5. **完整示例** ```python import sys # 在最短路径算法中初始化距离 def dijkstra(graph, start): distances = {node: float('inf') for node in graph} distances[start] = 0 # ...算法逻辑... return distances # 检查超大数是否超出索引范围 huge_number = 10**100 if huge_number > sys.maxsize: print("超出系统索引范围,需特殊处理") ``` --- ### 相关问题 1. 如何检测一个值是否为无穷大? 2. Python中`sys.maxsize`在不同操作系统下的差异? 3. 超大整数运算对内存的影响及优化方法? 4. IEEE 754浮点数标准包含哪些特殊值? 5. 如何在Pandas中处理无穷大值?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值