3

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

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

4

2 回答 2

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
于 2012-08-03T15:03:42.063 回答
2

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

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

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

于 2012-08-29T13:16:24.777 回答