将原生类型的操作转换为 Math.NET 数值

Translate operations on native types to Math.NET Numerics

在我从使用本机 F# 类型转变为 Math.NET Numerics 类型的过程中,一个示例将是最有帮助的。

以下如何表示为对 DenseMatrix or DenseVector 类型的操作?我尝试使用下面的代码片段尝试将所有容器表示为 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 的最快方法是什么?

我认为您的示例没有任何需要以不同方式完成的事情 - 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