Как найти максимальный матричный элемент в 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).

Другие вопросы по тегам