代码之家  ›  专栏  ›  技术社区  ›  Luke Xu

F#函数接受的参数太多或在不期望的上下文中使用

  •  0
  • Luke Xu  · 技术社区  · 10 年前

    我正在尝试实现成本函数,目前我已经

    let computeCost (X : Matrix<double>) (y : Vector<double>) (theta : Vector<double>) =
        let m = y.Count |> double
        let J = (1.0/(2.0*m))*(((X*theta - y) |> Vector.map (fun x -> x*x)).Sum)
        J
    

    出于某种原因,我在第一个*后面的一半出现了一个错误:“这个函数需要太多参数,或者在不需要函数的上下文中使用。”

    然而,当我这样做时

    let computeCost (X : Matrix<double>) (y : Vector<double>) (theta : Vector<double>) =
        let m = y.Count |> double
        let J = (((X*theta - y) |> Vector.map (fun x -> x*x)).Sum)
        J
    

    它工作得很好,上面说 val J:float 这是我所期望的。但只要加入第二个部分 (1.0/(2.0*m)) 部分我得到了错误。我在所有的东西周围都有括号,所以我看不出它是如何被应用的部分函数或沿着这些线的东西。我肯定这是件蠢事,但我似乎想不通。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Luke Xu    10 年前

    没关系,我很笨,我又回到了我的C#使用方式。Sum()的实际使用方式是

    let computeCost (X : Matrix<double>) (y : Vector<double>) (theta : Vector<double>) =
        let m = y.Count |> double
        let J = (1.0/(2.0*m)) * (((X*theta - y) |> Vector.map (fun x -> x*x)) |> Vector.sum)
        J
    

    这似乎解决了问题。