从求和中忽略 NaN

Posted

技术标签:

【中文标题】从求和中忽略 NaN【英文标题】:Ignoring NaN from summation 【发布时间】:2015-02-10 06:10:46 【问题描述】:

我想总结 10 个双变量,但是其中一些变量可能包含“NaN”。有没有办法从总和中忽略带有“NaN”的那些。现在我有一个像下面这样的简单添加,但是它为 SumLiq.. 变量分配了一个“NaN”值。

double SumLiqPerTimeStamp = l2_msg.size0 + l2_msg.size1 + l2_msg.size2 + l2_msg.size3
                           +l2_msg.size4 + l2_msg.size5 + l2_msg.size6 + l2_msg.size7 +  l2_msg.size8 + l2_msg.size9;

有没有一种快速有效的方法来检查“NaN”,而无需对每个都执行 if 语句?

【问题讨论】:

【参考方案1】:

如果输入为 NaN,则使用返回零的扩展方法:

public static double Value(this double input)

    return input == Double.NaN ? 0 : input;

然后将您的值相加为

var sum = l2_msg.size0.Value() + l2_msg.size1.Value() + ...

【讨论】:

【参考方案2】:

在你的msg类型中添加一个属性Size,它会在返回之前检查值,如果是NaN则返回0。

【讨论】:

我无法编辑类,这是我用于供应商产品@Eugene Sh 的 api。 你总是可以做一个包装,但它可能是一个超调。【参考方案3】:

N也许你可以把它们放在一个数组中并得到Sum()

double SumLiqPerTimeStamp = new double[] l2_msg.size0 , l2_msg.size1 , l2_msg.size2 , l2_msg.size3
                       ,l2_msg.size4 , l2_msg.size5 , l2_msg.size6 , l2_msg.size7 ,  l2_msg.size8 , l2_msg.size9 .Where( x => !double.IsNaN(x) ).Sum();

【讨论】:

以上是关于从求和中忽略 NaN的主要内容,如果未能解决你的问题,请参考以下文章

在 0 和 1 之间进行归一化,忽略 NaN

在 gnuplot 中,“缺少设置数据文件”,如何忽略“nan”和“-nan”?

如何在 pandas DataFrame 中忽略滚动平均值计算的 NaN 值?

MATLAB 中忽略 NaN 的累积行值的平均计算

忽略 Python 的 statsmodels 中的 NaN

Pandas - 列中 groupby 之后的 Concat 字符串,忽略 NaN,忽略重复项