Я ищу пользу (в лучшем случае, активно сохраняемом) библиотека матрицы C++. Таким образом, это должно быть шаблонным, потому что я хочу использовать комплекс rationals как числовой тип. Матрицы, с чем я имею дело, главным образом разрежены и унитарны.
Можете Вы предлагать библиотеки и также давать маленький explaination, почему использовать их, потому что я знаю, как найти их, но я не могу действительно решить то, что подходит для меня, потому что я пропускаю опыт с ними.
Править:
Основные операции, с которыми я имею дело, являются умножением матриц, скалярным умножением с векторным и кронекеровым продуктом. Размер матриц экспоненциален, и я хочу, по крайней мере, смочь иметь дело с матрицами до 1024x1024 записи.
Многие люди, выполняющие «серьезные» работы с матрицами, полагаются на BLAS , добавляя LAPACK / ATLAS (нормальные матрицы) или UMFPACK (разреженные матрицы) для более сложной математики. Причина в том, что этот код хорошо протестирован, стабилен, надежен и довольно быстр. Кроме того, вы можете купить их напрямую у поставщика (например, Intel MKL ), настроенного на вашу архитектуру, но также получить их бесплатно. uBLAS , упомянутый в Ответ Мануэля , вероятно, является стандартной реализацией C ++ BLAS. И если вам понадобится что-то вроде LAPACK позже, для этого есть привязки .
Однако ни одна из этих стандартных библиотек (BLAS / LAPACK / ATLAS или uBLAS + bindings + LAPACK / ATLAS) не помечает вас как шаблонная и простая в использовании (если только uBLAS не является всем, что вам когда-либо понадобится). На самом деле, я должен признать, что я обычно вызываю интерфейс C / Fortran напрямую, когда использую реализацию BLAS / LAPACK, поскольку я часто не вижу особых дополнительных преимуществ в комбинации привязок uBLAS +.
Если мне нужна простая в использовании библиотека матриц C ++ общего назначения, я обычно использую Eigen (в прошлом я использовал NewMat ). Преимущества:
Недостатки ( IMO):
Изменить: Предстоящий Eigen 3.1 позволяет некоторым функциям использовать Intel MKL (или любую другую реализацию BLAS / LAPACK).
Увеличить uBLAS , потому что он прошел фильтр Boost.
Есть несколько библиотек шаблонов, которые поддерживают разреженные матрицы, поэтому действительно трудно придумать лучшее обоснование, если вы не более конкретны в своих потребностях.