Подтвердить что ты не робот

Армадилло против Блица ++

Я начинаю новый научно-вычислительный проект на С++, и поскольку включено множество подробных процедур, я рассматриваю возможность использования каких-либо Armadillo или Blitz ++ для эффективной обработки массива/матрицы/тензора. Какой из них лучше использовать?

4b9b3361

Ответ 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.