与R相比,慢矩阵运算

时间:2017-08-21 04:27:24

标签: f# mathnet

以下计算的运行速度比在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时,似乎有一个巨大的加速。

0 个答案:

没有答案