与R相比,慢矩阵运算

pro*_*rth 5 f# mathnet-numerics

以下计算运行速度比R慢得多:

let result = (X.Transpose() * b * X).Inverse() * (X.Transpose() * b) * e // about 4 seconds on my machine
Run Code Online (Sandbox Code Playgroud)

或这个:

let result = (X.Transpose() * b * X).QR().Solve((X.Transpose() * b) * e)
Run Code Online (Sandbox Code Playgroud)

哪里

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.)
Run Code Online (Sandbox Code Playgroud)

但是在R中,通过以下方法可以实现相同的计算,只需要几百毫秒:

result <- solve(crossprod(X,b*X), crossprod(X,b*e)) // less than 200ms
Run Code Online (Sandbox Code Playgroud)

有没有办法加速F#计算?

[编辑]顺便说一句,SparseMatrix似乎是瓶颈.当使用DenseMatrix时,似乎有一个巨大的加速.