MathNet.Numerics.LinearAlgebra.vector的正确F#类型注释

时间:2014-11-19 16:49:49

标签: f# mathnet

我有以下程序:

open System
open MathNet.Numerics
open MathNet.Numerics.LinearAlgebra

//entropy
let entropy v  =
    let pct = v / v.Sum()
    let l1 = pct.Map (fun x -> System.Math.Log(x, 2.0))
    let p = Vector.map2 (fun x y -> x * y) pct l1
    let e = - p.Sum()
    e

[<EntryPoint>]
let main argv = 

    let v1 = vector [ 1.0 ; 3.0 ; 5.0 ]
    let e1 = entropy v1

    0 // return an integer exit code

我需要在熵函数中为varable v提供类型注释。如您所见,我传递给函数(v1)的参数定义为MathNet.Numerics.LinearAlgebra.vector。我已经为类型注释尝试了很多选项而没有成功。

它应该是什么?如果你能帮助我理解你是如何得出你的答案的话,可以获得奖励积分。

1 个答案:

答案 0 :(得分:3)

此向量类型是通用的; generic参数指示向量的每个组件的类型。类型注释必须至少指示泛型参数的数量,例如Vector<_>表示任何此类向量,或Vector<float>表示问题中使用的确切类型。

换句话说,Vector<_>Vector是编译器不相关的类型。注释应该用一个而不是零泛型参数来表示Vector类型。

我希望&#34;粗糙&#34;注释(v : Vector<_>)就足够了;然后,编译器会在函数后面使用float(值2.0)来推断泛型参数。 我虽然没有使用该库,所以我没有对此进行测试。