Я начинаю новый научно-вычислительный проект на С++, и поскольку включено множество подробных процедур, я рассматриваю возможность использования каких-либо Armadillo или Blitz ++ для эффективной обработки массива/матрицы/тензора. Какой из них лучше использовать?
Армадилло против Блица ++
Ответ 1
Мы были очень довольны Armadillo, которые мы завернули в R с помощью Rcpp Компонент интеграции R/С++ --- полученный пакет RcppArmadillo.
Конрад очень полезен и привержен, и Armadillo находится в активной разработке. Я понял, что Blitz ++, в то время как разрыв в свое время и очень влиятельный для шаблонной линейной алгебры, уже не активно развивается.
Редактировать 2012-06-28: По-видимому, на сайте Sourceforge для Blitz.
Изменить 2017-12-16: выглядит как Blitz ++ теперь находится в GitHub.
Ответ 2
Как всегда в этом случае, имея дело с линейной алгеброй и С++, я настоятельно рекомендую взглянуть на Eigen.
http://eigen.tuxfamily.org/index.php?title=Main_Page
Вероятно, одна из лучших библиотек линейных алгебр С++, когда-либо написанных на мой взгляд.
Ответ 3
Для полноты: я бы настоятельно советовал против Boost:: uBLAS, на всякий случай кто-то это рассматривает. Я использовал его, и API громоздкий, а производительность в целом ниже Eigen и Armadillo; это даже упоминается в разделе часто задаваемых вопросов uBLAS
В: Должен ли я использовать uBLAS для новых проектов?
A: На момент написания (09/2012) имеется много хороших матричных библиотек, например, MTL4, armadillo, eigen... uBLAS предлагает хорошую (но не выдающуюся) производительность. С другой стороны, последнее крупное улучшение uBLAS произошло в 2008 году, и с 2009 года никаких серьезных изменений не произошло. Поэтому нужно задать себе несколько вопросов, чтобы помочь решению:... Прост в использовании? uBLAS прост в использовании для простых вещей, но требует достойного знания С++, когда вы покидаете путь. Представление? Существуют более быстрые альтернативы. Передовой? uBLAS более 10 лет и пропустил все новые вещи от С++ 11.
"Я начинаю новый научно-вычислительный проект..."
API Armadillo пытается имитировать синтаксис MATLAB, который, как я полагаю, вам известен.
Ответ 4
Одна вещь, с которой я столкнулась, работая с Ublas, заключается в том, что она не предоставляет возможность выполнять операцию типа max(u,0)
, u+1
, abs(u)
, где u
- это вектор. Кроме того, синтаксис Boost Ublas является громоздким для записи по сравнению с ARMADILLO. Также есть сравнение скорости [click] (Сравнить blitz ++, armadillo, boost:: MultiArray)
Поэтому я рекомендую Armadillo.