1
Diffsharpのhessian関数は、System.Double [、]という名前を返します。または、浮動小数点[、]として表示されている変数にカーソルを置いた場合。このオブジェクトは少し解析するのが難しいようですが、私は理由は分かりません。 This質問は関連していますが、特定のサイズの行列のみを扱うため、答えは一般的には見えません。System.Double [、]をDenseMatrixに変換する
誰かがこのオブジェクトをDenseMatrixにマッサージするには、以下よりクリーンな方法を持っているのだろうかと思います。返される行列は常に正方形です。
私はこの変更したい:これまで
System.Double[,]
[[-1.008660933; 9.992007222e-06]
[9.992007222e-06; 0.4999911596]]
をしかしきれい:ここで
MathNet.Numerics.LinearAlgebra.Double.DenseMatrix
DenseMatrix 2x2-Double
-1.00866 9.99201E-06
9.99201E-06 0.499991
は私のコードです。これは、F#コードの残りの部分の中でちょっと厄介なように見えます。
let hessianToMatrix (h: float[,]) =
let v = h |> Seq.cast<float> |> Seq.toArray |> DenseVector
let dim = float v.Count |> sqrt |> int
let m = DenseMatrix.init dim dim (fun i j -> 0.)
for r in 0 .. dim-1 do
for c in 0 .. dim-1 do
m.[r, c] <- v.[r*dim + c]
m
let hess = hessian llNormal [|5.; 1.|] |> hessianToMatrix
hess.GetType() |> printfn "\n\n\n%A"
hess |> printfn "%A"