我有以下程序:
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。我已经为类型注释尝试了很多选项而没有成功。
它应该是什么?如果你能帮助我理解你是如何得出你的答案的话,可以获得奖励积分。
答案 0 :(得分:3)
此向量类型是通用的; generic参数指示向量的每个组件的类型。类型注释必须至少指示泛型参数的数量,例如Vector<_>
表示任何此类向量,或Vector<float>
表示问题中使用的确切类型。
换句话说,Vector<_>
和Vector
是编译器不相关的类型。注释应该用一个而不是零泛型参数来表示Vector类型。
我希望&#34;粗糙&#34;注释(v : Vector<_>)
就足够了;然后,编译器会在函数后面使用float(值2.0)来推断泛型参数。 我虽然没有使用该库,所以我没有对此进行测试。