以下计算的运行速度比在R中慢得多:
let result = (X.Transpose() * b * X).Inverse() * (X.Transpose() * b) * e // about 4 seconds on my machine
或者这个:
let result = (X.Transpose() * b * X).QR().Solve((X.Transpose() * b) * e)
,其中
open MathNet.Numerics.LinearAlgebra
let X = DenseMatrix.init 2000 7 (fun i j -> 1.)
let b = SparseMatrix.ofDiag (vector [for i in 0 .. 1999 do yield 1.])
let e = DenseMatrix.init 2000 1 (fun i j -> 1.)
在R中,通过以下方法可以实现相同的计算,只需要几百毫秒:
result <- solve(crossprod(X,b*X), crossprod(X,b*e)) // less than 200ms
有没有办法加速F#计算?
[编辑] 顺便说一句,SparseMatrix似乎是瓶颈。当使用DenseMatrix时,似乎有一个巨大的加速。