NAN,IND,INF,DEN的概念

1)NAN - Not A Number。意思是不是一个数值。VS调试显示类似”1.#QNAN00000000000“。

产生原因:无意义的算术计算如负数开方。判断方法:包含float.h头文件,调用_isnan()。

2)IND - Indeterminate Number。意思是不确定数值。VS调试显示类似“1.#IND000000000000”。

是NAN的一种特殊情况。产生原因:0除0,或无限大除无限大。判断方法通NAN

3)INF - Infinity。意思是无限大。VS调试显示类似“1.#INF000000000000”。

产生原因:如1/0.0的计算结果。判断方法:_finite()。

4)DEN - Denormalized。意思是非规格化数值。VS调试显示类似“4.940656458421e-324#DEN”。

无限接近0的值,无法用有限的位数保存的科学计数值。
dDenTest = 0.01E-305;
dDenTest /= 10; // This will produce a denormalized number.
dDenTest *= 10; // This will result in the previous normalized.
判断方法:
if ( dDEN != 0 && fabs ( dDEN ) <= std::numeric_limits<double>::denorm_min())
{
// it's denormalized
bDEN = true;
}

这些值的意义在其他平台上也是一致的,不过表达方式在不同的平台不同。

osg使用过程中,某个顶点数值为INF,导致场景范围计算错误,相机设置不正确而看不到对象。

### 处理 NaN 值的方法 在编程和数据分析上下文中,处理缺失值(NaN)是一个常见且重要的任务。以下是几种常用方法来应对这些情况: #### 删除含有 NaN 的记录 最简单的方式就是直接删除那些存在任何缺失值的数据条目。这种方法适用于当数据集中有大量样本而少量丢失不会显著影响整体分析结果的情形。 ```python import pandas as pd df = pd.DataFrame({'A': [1, 2], 'B': [None, 4]}) cleaned_df = df.dropna() print(cleaned_df) ``` 此操作会移除所有包含 `NaN` 的行[^1]。 #### 使用均值/众数填充 对于数值型特征可以考虑采用列平均值或者中位数来进行填补;而对于分类变量则可以选择使用频率最高的类别作为替代方案。这有助于保持原始分布特性的同时减少因为空缺带来的偏差。 ```python mean_value = df['column_with_missing'].mean() filled_df = df.fillna(mean_value) mode_value = df.mode().iloc[0] categorical_filled_df = df.fillna(mode_value) ``` 上述代码展示了如何利用 Pandas 库中的函数实现这一目的。 #### 插补法 (Imputation) 更复杂的策略涉及通过建模其他已知属性之间的关系预测未知部分。Scikit-Learn 提供了一个名为 SimpleImputer 的工具可以帮助完成这项工作。它支持多种插补方式如常量替换、统计度量计算以及 KNN 算法等。 ```python from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='most_frequent') transformed_data = imputer.fit_transform(df) ``` 这里选择了最常见的值进行填充,也可以根据具体需求调整参数设置。 #### 特殊标记 有时为了保留有关缺失性的信息,在某些情况下可能希望用特定标志代替实际的 `NaN` 来表示该位置确实缺少有效输入而不是被错误地设定了某个默认值。 ```python special_marking_df = df.fillna('Missing Value Indicator') ``` 这种方式特别适合于后续需要区分正常零值与真正意义上的空白之处的应用场景。 #### 预测模型辅助 如果数据集非常庞大并且有足够的历史模式可供学习,则可以通过训练机器学习算法基于现有观测去估计潜在的真实取值。不过需要注意的是这样做可能会引入额外假设并增加复杂程度。 综上所述,选择哪种手段取决于具体的业务背景和技术条件等因素综合考量的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值