2012-08-03 93 views
2

我想創建一個自定義優化的矩陣運算(根據我瞭解的稀疏矩陣我使用的是智能直積)使用MathNet.numerics爲指數CSHARP。C#Mathnet Numerics的 - 獲得非零稀疏矩陣元素

是否有訪問得到一個稀疏矩陣的非零元素? (或索引嗎?或者它們的迭代器?或CSR表示?)

+0

由於Math.NET Numerics的V2.2.1中,克羅內克積在稀疏矩陣重載正確利用稀疏性。 – 2012-08-29 13:10:21

回答

4

您可以使用IndexedEnumerator只能訪問你的矩陣中的非零元素。方法簽名是:

public override IEnumerable<Tuple<int, int, double>> IndexedEnumerator() 

例如,下面的代碼:

var mtx = new SparseMatrix(new DiagonalMatrix(3, 3, new[] {1.0, 1, 1})); 
Console.WriteLine(mtx.NonZerosCount); 

foreach (var tuple in mtx.IndexedEnumerator()) 
{ 
    Console.WriteLine("({0},{1}) = {2}", tuple.Item1, tuple.Item2, tuple.Item3); 
} 

將產生以下的輸出:

3 
(0,0) = 1 
(1,1) = 1 
(2,2) = 1 
+1

啊,用幾分鐘的時間來回答打我。 – ja72 2012-08-03 15:15:12

2

由於V2.2.1還可以訪問原始CSR表示直接:

var m = new SparseMatrix(1000,1000); 
var csr = (SparseCompressedRowMatrixStorage<double>) m.Storage; 

要注意的是目前我們的企業社會責任不非零ValueCount存儲在行指針數組的最後一個領域,雖然我們很可能會改變,在不久的將來(成爲完全兼容,也爲代碼的簡化)