Лучшая Библиотека Матрицы C++ для редких унитарных матриц

Я ищу пользу (в лучшем случае, активно сохраняемом) библиотека матрицы C++. Таким образом, это должно быть шаблонным, потому что я хочу использовать комплекс rationals как числовой тип. Матрицы, с чем я имею дело, главным образом разрежены и унитарны.

Можете Вы предлагать библиотеки и также давать маленький explaination, почему использовать их, потому что я знаю, как найти их, но я не могу действительно решить то, что подходит для меня, потому что я пропускаю опыт с ними.

Править:

Основные операции, с которыми я имею дело, являются умножением матриц, скалярным умножением с векторным и кронекеровым продуктом. Размер матриц экспоненциален, и я хочу, по крайней мере, смочь иметь дело с матрицами до 1024x1024 записи.

8
задан denfromufa 12 October 2013 в 11:02
поделиться

2 ответа

Многие люди, выполняющие «серьезные» работы с матрицами, полагаются на 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 ). Преимущества:

  • довольно быстро на архитектуре Intel, вероятно, самый быстрый для небольших матриц
  • хороший интерфейс
  • почти все, что вы ожидаете от библиотеки матриц
  • вы можете легко добавить новые типы

Недостатки ( IMO):

  • однопроцессорный [ Изменить: частично исправлен в Eigen 3.0 ]
  • медленнее для больших матриц и некоторых сложных математических операций, чем ATLAS или Intel MKL (например, разложение LU ) [ Редактировать: также улучшено в Eigen 3.0]
  • только экспериментальная поддержка разреженных матриц [ Редактировать: улучшено в следующей версии 3.1].

Изменить: Предстоящий Eigen 3.1 позволяет некоторым функциям использовать Intel MKL (или любую другую реализацию BLAS / LAPACK).

10
ответ дан 5 December 2019 в 11:24
поделиться

Увеличить uBLAS , потому что он прошел фильтр Boost.

Есть несколько библиотек шаблонов, которые поддерживают разреженные матрицы, поэтому действительно трудно придумать лучшее обоснование, если вы не более конкретны в своих потребностях.

4
ответ дан 5 December 2019 в 11:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: