2 条题解
-
0
NUMPY017 题解:表达式结果判断
题目
计算并输出以下 numpy 表达式的结果(每行一个):
- $\texttt{np.nan} \text{ in } \texttt{set}([\texttt{np.nan}])$
代码
import numpy as np print(0 * np.nan) print(np.nan == np.nan) print(np.inf > np.nan) print(np.nan - np.nan) print(np.nan in set([np.nan])) print(0.3 == 3 * 0.1)
结果分析
表达式 结果 说明 0 * np.nannan 任何数乘以 nan 都得 nan np.nan == np.nanFalse NaN 不等于自身 np.inf > np.nan任何数与 nan 比较都返回 False np.nan - np.nannan nan 运算结果还是 nan np.nan in set([np.nan])True Python 的 nan 可以放入集合 0.3 == 3 * 0.1False 浮点数精度问题
输出
nan False False nan True False
核心知识点
知识点 说明 np.nanNot a Number,表示无效值 np.inf无穷大 NaN != NaN NaN 不等于自身 浮点数精度 十进制小数无法精确表示为二进制
判断 NaN 的正确方法
# 错误! x == np.nan # 永远返回 False # 正确! np.isnan(x) # 返回 True/False比较浮点数的正确方法
# 错误! 0.3 == 3 * 0.1 # False # 正确! np.isclose(0.3, 3 * 0.1) # True -
0
NUMPY017 题解:NaN 和 Inf 的特性
题目
分析以下表达式的结果:
0 * np.nannp.nan == np.nannp.inf > np.nannp.nan - np.nannp.nan in set([np.nan])0.3 == 3 * 0.1
解题思路
理解 NaN(Not a Number)和 Inf(Infinity)的特殊性质。
代码
import numpy as np print(0 * np.nan) print(np.nan == np.nan) print(np.inf > np.nan) print(np.nan - np.nan) print(np.nan in set([np.nan])) print(0.3 == 3 * 0.1)输出结果
nan False False nan True False知识点详解
1. NaN 的特性
NaN表示"不是一个数字"(Not a Number)NaN与任何数比较都返回FalseNaN与NaN比较也返回False(因为 NaN 代表未定义的值)
2. Inf 的特性
Inf表示"无穷大"- 任何数与 NaN 比较都返回 False
3. 浮点数精度问题
0.3 == 3 * 0.1 # False- 这是因为浮点数在计算机中无法精确表示
0.3的实际值约为0.29999999999999998893 * 0.1的实际值约为0.3000000000000000444
核心知识点
np.nan—— 表示非数字np.inf—— 表示无穷大- NaN 与任何值比较都返回 False
- 浮点数存在精度问题
- 1
信息
- ID
- 58
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 2
- 已通过
- 1
- 上传者