将本机类型的操作转换为Math.NET Numerics

时间:2016-07-09 17:33:51

标签: f# mathnet mathdotnet

在我努力从使用原生F#类型转换为Math.NET Numerics类型时,一个例子将是最有帮助的。

如何将以下内容表示为DenseMatrixDenseVector类型的操作?我已经玩过下面的代码片段,尝试将所有容器表示为Math.NET类型,但不断出现各种错误。

open MathNet.Numerics
open MathNet.Numerics.LinearAlgebra
open MathNet.Numerics.Random
open MathNet.Numerics.Distributions
open MathNet.Numerics.Statistics

let Tsize = 10
let Tsamps = 5

let expLL (arr : float []) = 
    arr |> Array.average

let arrL = Array.init Tsamps ( 
              fun i -> 
                 [| 
                     for i in 1 .. Tsize do 
                        yield Exponential.Sample(1.)
                 |] |> expLL 
           )

此外,最简单的方法是将float []float [] []转换为DenseMatrix吗?

感谢。

1 个答案:

答案 0 :(得分:3)

我不认为你的样本有什么需要以不同的方式完成 - Math.NET为线性代数提供了很好的功能,但是你并没有在这里做任何矩阵或向量计算,所以基本数组只是工作精细。如果你想把结果变成一个向量,我可能会写这样的东西(稍微调整以避免太长的行):

let sample () = Array.init Tsize (fun _ -> Exponential.Sample(1.0)) |> expLL    
let vecL = vector [ for i in 1 .. Tsamps -> sample() ]

至于将数据转换为矩阵,有一个matrix函数:

let nested = [ [1.0; 2.0; 3.0]; [4.0; 5.0; 6.0] ]
let m = matrix nested