2015-11-09 3 views
1

Каков наилучший (читаемый и быстрый) способ найти максимальный элемент матрицы с использованием MathNet в 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() 
+0

Пожалуйста, определите, что вы подразумеваете под «лучшим способом». Быстрейший? Наименьшее количество символов? Легче понять? Что-то другое? – Neolisk

ответ

2

Попробуйте matrix.Enumerate().Maximum() вместо этого, что и гораздо проще и гораздо быстрее. Вы также можете использовать метод расширения Enumerable.Max, но Statistics.Maximum значительно быстрее в случае плотной матрицы.

Для разреженных матриц, возможно, вы захотите сделать matrix.Enumerate(Zeros.AllowSkip).Maximum(), хотя для этого потребуется специальная обработка, если возвращаемое значение отрицательно (но может быть нулевым).

Также обратите внимание, что AbsoluteMaximum действительно является абсолютным максимумом, который отличается от максимума (|-5| > |3|, но -5 < 3).

+0

Спасибо. Объяснение замечательно. –

Смежные вопросы