Лучшая C ++ Matrix Library для разреженных унитарных матриц - PullRequest
8 голосов
/ 08 февраля 2010

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

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

EDIT:

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

Ответы [ 3 ]

10 голосов
/ 08 февраля 2010

Многие люди, занимающиеся "серьезными" матричными вещами, полагаются на 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).

4 голосов
/ 08 февраля 2010

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

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

1 голос
/ 14 февраля 2012

Вам также следует попробовать MLT и HASEM Matrix C ++ Library. Последний документ очень хорошо задокументирован.

...