Я не уверен, что есть один правильный ответ на вопрос, но здесь мы идем. Хотя многочисленные количественные проблемы могут быть сформулированы в форме линейной алгебры, по моему ограниченному опыту, из-за ограниченного опыта есть накладные расходы на производительность для простых операций при использовании Math.NET над написанием эквивалентных операций над необработанными массивами.
В качестве тестового примера я написал код для вычисления расстояния между вектором и ближайшим вектором в списке с тремя версиями: работа с массивами, работающими на плотных векторах и работающими на плотных векторах с провайдером MKL. Работа над массивами выполнялась примерно в 4 раза быстрее, чем на векторах, и в 3 раза быстрее, чем при использовании поставщика MKL.
Недостатком является то, что мне пришлось написать вручную вычисление расстояния вместо использования встроенной функции Norm. Поверхность заключается в том, что она намного быстрее. Примечание. Я не размещал код, буду рад сделать это, если это необходимо, я также мог бы неправильно использовать Math.NET.
Итак, мой вопрос таков: мне кажется, что использование абстракций более высокого уровня происходит за счет производительности. Это вообще дело, или есть ситуации (например, разреженные матрицы для экземпляров), где ожидается, что использование Math.NET будет превосходить операции, написанные вручную на массивах?
Если это так, я бы подумал, что использование части линейной алгебры Math.NET будет в основном полезна для "реальной" алгебры, которая включает в себя матрицы, чтобы избежать повторной реализации более сложных вычислений/алгоритмов и, возможно, для чтения кода, но для операций, которые являются более простыми векторными операциями, может быть лучше работать с необработанными массивами.
Любой свет, когда это хорошая идея использовать библиотеку против того, когда вы будете качать самостоятельно, будет оценен!