【问题标题】:Translate operations on native types to Math.NET Numerics将本机类型上的操作转换为 Math.NET Numerics
【发布时间】:2016-07-09 17:33:51
【问题描述】:

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

如何将以下内容表示为对DenseMatrixDenseVector 类型的操作?我已经尝试过使用下面的 sn-p 来尝试将所有容器表示为 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 的最快方法是什么?

【问题讨论】:

    标签: f# math.net mathnet-numerics


    【解决方案1】:

    我认为您的示例没有什么需要做不同的事情 - 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
    

    【讨论】:

    • 这里的 expLL 函数是微不足道的,但实际上我的大部分线性代数都可能在这个地方。所以为此我需要它接受矩阵对象。但我想我现在看到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多