Библиотека C++ для операций с массивами, матрицами, векторами и классической линейной алгеброй
Какую библиотеку вы используете для N-мерных массивов?
Я использую Blitz++ на работе, и мне действительно не нравится какой-то его аспект. Некоторые аспекты этого даже опасны. Необходимость изменения размера перед использованием operator=. A(Range::all(), Range::all()) для матрицы (0,0) и т. Д., А операции линейной алгебры должны выполняться через clapack.
Я использовал и любил Eigen. Я ценю его реализацию "все в заголовке", синтаксический сахар C++ и наличие всех необходимых мне операций линейной алгебры (умножение матриц, системное разрешение, холески...)
Что вы используете?
3 ответа
boost::array, а также boost:: MultiArray. Есть также довольно хороший пакет линейной алгебры в бусте под названием uBLAS
Есть также броненосец, который я использую в некоторых проектах. С их сайта:
Armadillo - это библиотека линейной алгебры C++ (математическая математика), нацеленная на достижение хорошего баланса между скоростью и простотой использования. Поддерживаются целые числа, числа с плавающей точкой и комплексные числа, а также подмножество тригонометрических и статистических функций. Различная матричная декомпозиция обеспечивается за счет дополнительной интеграции с библиотеками LAPACK и ATLAS.
Подход с отложенной оценкой используется (во время компиляции) для объединения нескольких операций в одну и уменьшения (или устранения) потребности во временных. Это достигается с помощью рекурсивных шаблонов и шаблонного метапрограммирования.
Эта библиотека полезна, если C++ был выбран в качестве языка выбора (из-за скорости и / или возможностей интеграции), а не другого языка, такого как Matlab ® или Octave. Он распространяется по лицензии, которая полезна как в открытом, так и в коммерческом контекстах.
Armadillo в основном разрабатывается в NICTA (Австралия), с участием со всего мира.
Мы успешно использовали TNT в течение ряда лет. Однако есть достаточно проблем, которые вместо этого мы движемся к внутренне разработанному решению. Два самых важных момента для нас:
- Массивы не являются поточно-ориентированными, даже для доступа на чтение, поскольку они используют не-поточно-безопасный счетчик ссылок.
- Массивы вызывают всевозможные проблемы, когда вы пишете const-правильный код.
Если это не проблема, тогда они довольно удобны для множества общих задач.