F# 不使用Mkl本机提供程序的MathNet.Numerics

F# 不使用Mkl本机提供程序的MathNet.Numerics,f#,blas,math.net,mathnet-numerics,F#,Blas,Math.net,Mathnet Numerics,我有一个F#项目,它将MathNet.Numerics用于线性代数例程 我在F#模块中放置了以下代码: module LinearAlgebra open MathNet.Numerics open MathNet.Numerics.LinearAlgebra.Double open MathNet.Numerics.LinearAlgebra.Generic Control.LinearAlgebraProvider <- new Algorithms.LinearAlgebra.M

我有一个F#项目,它将MathNet.Numerics用于线性代数例程

我在F#模块中放置了以下代码:

module LinearAlgebra

open MathNet.Numerics
open MathNet.Numerics.LinearAlgebra.Double
open MathNet.Numerics.LinearAlgebra.Generic

Control.LinearAlgebraProvider <- new Algorithms.LinearAlgebra.Mkl.MklLinearAlgebraProvider()
模块线性代数代数
开放MathNet.Numerics
打开MathNet.Numerics.LinearAlgebra.Double
打开MathNet.Numerics.LinearAlgebra.Generic
Control.linearlgebraprovider比上面提到的博客文章更新了一些,但似乎所有必需的步骤都已经完成了

  • 你的矩阵有多大
  • 所有涉及的矩阵都是稠密的吗
  • 这个模块是线性代数代码所在的模块吗?如果没有,您是否确保在线性代数代码之前实际执行此模块

在执行线性代数代码之前,您可以通过检查
Control.LinearAlgebraProvider
来验证本机提供程序是否已启用。在v3中,在其上调用
ToString
将提供一些附加信息,如平台和版本。

矩阵为4000x430和430x430。我只使用密集的矩阵类型,即使有些在结构上是稀疏的。据我所知,稀疏还没有与本机提供者合作。因此,如果我在进行计算的模块中设置MklProvider,它就会工作。但如果我在另一个模块中设置它并导入该模块,它将不起作用。因此,我将调用包装为在init函数中设置提供程序,并在打开模块后调用该函数,这同样有效。一定是关于F#模块的,我不知道。谢谢你的更新。是的,向MKL本机提供程序添加稀疏支持已延迟到v3.0之后的一个次要版本。找到了打开的模块中的顶级语句不起作用的原因。我在模块中只有内联函数,所以在使用线性代数提供程序之前,它从未真正被打开过。顺便说一句,非常感谢MathNet团队提供了这个库。