从 F# 中的列表中删除 nans
Removing nans from a list in F#
我想从列表中删除 nan
s,所以我实现了如下所示的功能。
val it : float list =
[50.0; -20833.33333; 4.50701062e-14; -4.267032701e-15; 3.942195769e-16;
-3.555114863e-17; 3.130384319e-18; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;
nan; nan; nan; nan; nan; nan; nan; nan; nan]
let rec remove_nan l =
match l with
| [] -> []
| x::rest -> if x=nan then remove_nan rest
else x::(remove_nan rest)
remove_nan points
但是,它不会从列表中删除 nan
。为什么不删除它们?
NaN 具有奇怪的方程性质。具体来说,nan = nan
是错误的!在您的代码中使用它:
if System.Double.IsNaN x then remove_nan rest
或者如下定义remove_nan
,它更短并且不会增加堆栈:
let remove_nan = List.filter (System.Double.IsNaN >> not)
我想从列表中删除 nan
s,所以我实现了如下所示的功能。
val it : float list =
[50.0; -20833.33333; 4.50701062e-14; -4.267032701e-15; 3.942195769e-16;
-3.555114863e-17; 3.130384319e-18; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;
nan; nan; nan; nan; nan; nan; nan; nan; nan]
let rec remove_nan l =
match l with
| [] -> []
| x::rest -> if x=nan then remove_nan rest
else x::(remove_nan rest)
remove_nan points
但是,它不会从列表中删除 nan
。为什么不删除它们?
NaN 具有奇怪的方程性质。具体来说,nan = nan
是错误的!在您的代码中使用它:
if System.Double.IsNaN x then remove_nan rest
或者如下定义remove_nan
,它更短并且不会增加堆栈:
let remove_nan = List.filter (System.Double.IsNaN >> not)