3

csharp の MathNet.numerics を使用して、カスタムの最適化された行列演算 (使用している疎行列について知っていることに基づくスマート クロネッカー積) を作成したいと考えています。

スパース行列のゼロ以外の要素を取得するためのアクセサーはありますか? (またはインデックス?またはその反復子?または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 に答える