【问题标题】:Removing nans from a list in F#从 F# 中的列表中删除 nans
【发布时间】:2017-06-28 17:52:15
【问题描述】:

我想从列表中删除nans,所以我实现了如下所示的功能。

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。为什么不删除它们?

【问题讨论】:

    标签: list f# nan


    【解决方案1】:

    NaN 具有奇怪的方程属性。具体来说,nan = nan 是错误的!在您的代码中使用它:

    if System.Double.IsNaN x then remove_nan rest
    

    或者如下定义remove_nan,这样更短且不会增长栈:

    let remove_nan = List.filter (System.Double.IsNaN >> not)
    

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多