我想使用 MathNet.numerics 为 csharp 创建一个自定义优化矩阵运算(基于我对我正在使用的稀疏矩阵的了解的智能 kronecker 产品)。
是否有获取稀疏矩阵的非零元素的访问器?(或索引?或其迭代器?或 CSR 表示?)
我想使用 MathNet.numerics 为 csharp 创建一个自定义优化矩阵运算(基于我对我正在使用的稀疏矩阵的了解的智能 kronecker 产品)。
是否有获取稀疏矩阵的非零元素的访问器?(或索引?或其迭代器?或 CSR 表示?)
您可以使用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
从 v2.2.1 开始,您还可以直接访问原始 CSR 表示:
var m = new SparseMatrix(1000,1000);
var csr = (SparseCompressedRowMatrixStorage<double>) m.Storage;
请注意,目前我们的 CSR 不会将非零 ValueCount 存储在行指针数组的最后一个字段中,尽管我们可能会在不久的将来更改它(以完全兼容并简化代码)