c#Mathnet数字 - 获取非零稀疏矩阵元素的索引

时间:2012-08-03 14:23:45

标签: c# numerics mathdotnet

我想使用MathNet.numerics为csharp创建一个自定义优化矩阵运算(基于我所知的稀疏矩阵的智能kronecker产品)。

是否有访问器来获取稀疏矩阵的非零元素? (或索引?或其迭代器?或CSR表示?)

2 个答案:

答案 0 :(得分: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 :(得分:2)

从v2.2.1起,您还可以直接访问原始CSR表示:

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

请注意,目前我们的CSR不会将非零ValueCount存储在行指针数组的最后一个字段中,尽管我们可能会在不久的将来对其进行更改(以使其完全符合并简化代码)