3

C#でMathNetを使用して最大の行列要素を見つけるための最良の(読みやすく高速な)方法は何ですか? これが私のやり方です:

int size = 4;
var matrix = Matrix.Build.Dense(size, size, Matrix.One);
matrix[3, 3] = 3;
var max = matrix.ReduceRows((v1, v2) => v1.AbsoluteMaximum() > v2.AbsoluteMaximum()? v1 : v2).AbsoluteMaximum()
4

1 に答える 1

4

代わりに試してみてくださいmatrix.Enumerate().Maximum()。それははるかに簡単で、はるかに高速です。Enumerable.Max拡張メソッドを使用することもできますがStatistics.Maximum、密行列の場合は大幅に高速です。

スパース行列の場合はmatrix.Enumerate(Zeros.AllowSkip).Maximum()、代わりに実行したい場合がありますが、返された値が負の場合は特別な処理が必要になります (ただし、ゼロにする必要がある場合があります)。

また、 は実際には絶対最大値であり、最大値 ( , but )AbsoluteMaximumとは異なることに注意してください。|-5| > |3|-5 < 3

于 2015-11-09T16:33:16.620 に答える