在我努力从使用原生F#类型转换为Math.NET Numerics类型时,一个例子将是最有帮助的。
如何将以下内容表示为DenseMatrix或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
吗?
感谢。
答案 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