cov*_*efe 0 c# sparse-matrix mathnet-numerics math.net
我知道有些矩阵有很多数据,而另一些矩阵主要是 0 或者是空的。但是,与创建 DenseMatrix 对象来保存稀疏矩阵相比,创建 SparseMatrix 对象来保存稀疏矩阵的优势是什么?就方法而言,它们似乎都提供或多或少相同的操作。
我还想知道什么时候你会使用 Matrix 对象来保存数据——因为在有什么优势或情况下,这比使用其他两个更受欢迎。
对于小矩阵(例如小于 1000x1000),密集矩阵效果很好。但在实践中存在很多问题,需要更大的矩阵,但几乎所有值都为零(通常靠近对角线的非零值)。使用稀疏矩阵,可以在密集结构不可行的情况下处理非常大的矩阵(因为它需要太多内存,或者使用 CPU 时间来计算成本太高)。
请注意,截至今天,Math.NET Numerics 直接矩阵分解方法仅针对密集矩阵进行了优化;对稀疏数据使用迭代求解器。
关于类型,在 Math.NET Numerics v3 中,双值矩阵的层次结构如下:
Matrix<double>
|- Double.Matrix
|- Double.DenseMatrix
|- Double.SparseMatrix
|- Double.DiagonalMatrix
Run Code Online (Sandbox Code Playgroud)
用Matrix<T>I 指完整类型MathNet.Numerics.LinearAlgebra.Matrix<T>,用
Double.MatrixtoMathNet.Numerics.LinearAlgebra.Double.Matrix等。
Matrix<double>: 始终仅使用此泛型类型声明所有变量、属性和参数。实际上,在大多数情况下,这是用户代码中唯一需要的类型。Double.Matrix: 不使用Double.DenseMatrix:仅用于创建密集矩阵 - 如果您不想使用构建器 ( Matrix<double>.Build.Dense...)Double.SparseMatrix:仅用于创建稀疏矩阵 - 如果您不想使用构建器Double.DiagonalMatrix:仅用于创建对角矩阵 - 如果您不想使用构建器