2012-08-03 95 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存储在行指针数组的最后一个领域,虽然我们很可能会改变,在不久的将来(成为完全兼容,也为代码的简化)