Многие люди, занимающиеся "серьезными" матричными вещами, полагаются на BLAS , добавляя LAPACK / ATLAS (нормальные матрицы) или UMFPACK (разреженные матрицы) для более продвинутой математики. Причина в том, что этот код хорошо протестирован, стабилен, надежен и довольно быстр. Кроме того, вы можете купить их непосредственно у поставщика (например, Intel MKL ), настроенного на вашу архитектуру, но также получить их бесплатно. uBLAS упомянутый в Ответ Мануэля , вероятно, является стандартной реализацией C ++ BLAS. И если позже вам понадобится что-то вроде LAPACK, для этого есть привязок .
Однако ни одна из этих стандартных библиотек (BLAS / LAPACK / ATLAS или uBLAS + привязки + LAPACK / ATLAS) не помечает ваш ящик как шаблонный и простой в использовании (если только uBLAS - это все, что вам когда-либо понадобится). На самом деле, я должен признать, что я склонен вызывать интерфейс C / Fortran напрямую, когда я использую реализацию BLAS / LAPACK, поскольку я часто не вижу большого дополнительного преимущества в комбинации привязок uBLAS +.
Если мне нужна простая в использовании универсальная матричная библиотека C ++, я обычно использую Eigen (раньше я использовал NewMat ). Преимущества:
- довольно быстро на архитектуре Intel, вероятно, самый быстрый для небольших матриц
- хороший интерфейс
- почти все, что вы ожидаете от библиотеки матриц
- Вы можете легко добавить новые типы
Недостатки (ИМО):
- однопроцессорный [ Редакт.: частично исправлен в Eigen 3.0 ]
- медленнее для больших матриц и некоторых сложных математиков, чем ATLAS или Intel MKL (например, декомпозиция LU) [ Редактировать: также улучшено в Eigen 3.0]
- только экспериментальная поддержка разреженных матриц [ Edit: улучшена в следующей версии 3.1].
Редактировать: Предстоящий Eigen 3.1 позволяет некоторым функциям использовать Intel MKL (или любую другую реализацию BLAS / LAPACK).