![](/img/trans.png)
[英]Difference between methods Matrix<T> Divide(double scalar) and Matrix<T> DivideByThis(double scalar) in MathNet Numerics?
[英]Difference between Matrix, SparseMatrix, and DenseMatrix in MathNet Numerics?
我知道有些矩陣有很多數據,而另一些矩陣主要有0或為空。 但是,創建一個SparseMatrix對象來保存一個稀疏填充的矩陣比創建一個DenseMatrix對象來保存一個稀疏填充的矩陣有什么好處呢? 就方法而言,它們似乎都提供或多或少的相同操作。
我也想知道您何時使用Matrix對象保存數據-在任何優點或情況下,這比使用其他兩個對象更可取。
對於小型矩陣(例如,小於1000x1000),密集矩陣可以很好地工作。 但是實際上,存在許多問題,需要更大的矩陣,但是幾乎所有值都是零(通常非零值接近對角線)。 使用稀疏矩陣,可以在密集結構不可行的情況下處理非常大的矩陣(因為它需要過多的內存或使用CPU時間明智的方式來進行昂貴的計算)。
請注意,到目前為止,Math.NET數值直接矩陣分解方法僅針對密集矩陣進行了優化。 而是使用迭代求解器來處理稀疏數據。
關於類型,在Math.NET Numerics v3中,雙值矩陣的層次結構如下:
Matrix<double>
|- Double.Matrix
|- Double.DenseMatrix
|- Double.SparseMatrix
|- Double.DiagonalMatrix
使用Matrix<T>
我指的是完整類型MathNet.Numerics.LinearAlgebra.Matrix<T>
,而Double.Matrix
是MathNet.Numerics.LinearAlgebra.Double.Matrix
等。
Matrix<double>
:始終僅使用此泛型類型聲明所有變量,屬性和參數。 實際上,在大多數情況下,這是用戶代碼中唯一需要的類型。 Double.Matrix
:請勿使用 Double.DenseMatrix
:僅用於創建密集矩陣-如果您不希望使用構建器( Matrix<double>.Build.Dense...
) Double.SparseMatrix
:僅用於創建稀疏矩陣-如果您不希望使用生成器 Double.DiagonalMatrix
:僅用於創建對角矩陣-如果您不希望使用生成器 它們分別針對該特定用途進行了優化。 例如,稀疏矩陣使用CSR格式。
壓縮的稀疏行(CSR或CRS)
CSR實際上與耶魯稀疏矩陣格式相同,除了列數組通常存儲在行索引數組之前。 即CSR為(val,col_ind,row_ptr),其中val是矩陣的(從左到右,然后從上到下)非零值的數組; col_ind是與值對應的列索引; 並且,row_ptr是每行開始的值索引列表。 該名稱基於以下事實:行索引信息是相對於COO格式進行壓縮的。 通常使用另一種格式(LIL,DOK,COO)進行構造。 此格式對於算術運算,行切片和矩陣向量乘積有效。 請參閱scipy.sparse.csr_matrix。
有關更多信息,請參見Wiki 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.