【问题标题】:c# Mathnet Numerics -- get index of non-zero sparse matrix elementsc# Mathnet Numerics -- 获取非零稀疏矩阵元素的索引
【发布时间】:2012-08-03 14:23:45
【问题描述】:

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

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

【问题讨论】:

  • 从 Math.NET Numerics v2.2.1 开始,KroneckerProduct 在稀疏矩阵中被重载以正确利用稀疏性。

标签: c# numeric math.net mathnet-numerics


【解决方案1】:

您可以使用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

【讨论】:

  • 啊,比我早几分钟的答案。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多