我想使用MathNet.numerics为csharp创建一个自定义优化矩阵运算(基于我所知的稀疏矩阵的智能kronecker产品)。
是否有访问器来获取稀疏矩阵的非零元素? (或索引?或其迭代器?或CSR表示?)
答案 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存储在行指针数组的最后一个字段中,尽管我们可能会在不久的将来对其进行更改(以使其完全符合并简化代码)