Как найти максимальный матричный элемент в MathNet?
Каков наилучший (читаемый и быстрый) способ найти максимальный матричный элемент с помощью MathNet в C#? Это мой путь:
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()
1 ответ
Решение
Пытаться matrix.Enumerate().Maximum()
напротив, это гораздо проще и быстрее. Вы также можете использовать Enumerable.Max
метод расширений, но Statistics.Maximum
значительно быстрее в случае плотной матрицы.
Для разреженных матриц вы можете сделать matrix.Enumerate(Zeros.AllowSkip).Maximum()
вместо этого, хотя для этого потребуется специальная обработка, если возвращаемое значение отрицательное (но, возможно, должно быть равно нулю).
Также обратите внимание, что AbsoluteMaximum
действительно абсолютный максимум, который отличается от максимума (|-5| > |3|
, но -5 < 3
).