armadillo
Высокопроизводительная библиотека линейной алгебры и научных вычислений на C++, предназначенная для создания эффективного и удобочитаемого кода. Библиотека предоставляет интуитивно понятный синтаксис, близкий к MATLAB/Octave, и автоматически оптимизирует выражения на этапе компиляции с использованием шаблонного метапрограммирования. Armadillo широко применяется в машинном обучении, компьютерном зрении, обработке сигналов и других областях, требующих интенсивных матричных вычислений.
Особенности
- интуитивно понятный синтаксис, похожий на MATLAB, для быстрого прототипирования непосредственно на C++;
- эффективные классы для работы с плотными и разреженными матрицами, векторами и кубами;
- автоматическая оптимизация выражений через отложенные вычисления (lazy evaluation) с использованием шаблонного метапрограммирования;
- интеграция с высокопроизводительными библиотеками BLAS и LAPACK (OpenBLAS, Intel MKL, Apple Accelerate);
- поддержка OpenMP для автоматического распараллеливания вычислительно интенсивных операций;
- широкий набор функций: разложения матриц (SVD, QR, eigen), решатели СЛАУ, генераторы случайных чисел, статистика.
Основные компоненты
Библиотека состоит из нескольких модульных классов и функций, охватывающих все аспекты линейной алгебры и работы с матрицами (подробнее с документацией можно ознакомиться здесь).
Классы для работы с матрицами и векторами
Armadillo предоставляет гибкие классы для представления плотных и разреженных массивов данных. Основные классы шаблонизированы по типу элементов (float, double, complex и др.).
Основные классы:
- Mat, mat, cx_mat — плотная матрица произвольного размера;
- Col, colvec, vec — плотный вектор-столбец;
- Row, rowvec — плотный вектор-строка;
- Cube, cube, cx_cube — плотный трёхмерный массив (куб);
- SpMat, sp_mat, sp_cx_mat — разреженная матрица.
Базовые операции и методы доступа
Классы предоставляют удобные методы для доступа к данным, изменения размеров и базовых преобразований.
Основные методы:
.n_rows,.n_cols,.n_elem,.n_slices— получение размеров объекта;(),[],.at()— доступ к элементам с проверкой границ и без;.zeros(),.ones(),.eye(),.randu(),.randn()— инициализация специальными значениями;.fill(value)— заполнение всех элементов заданным значением;.set_size()— изменение размера без сохранения данных;.reshape(),.resize()— изменение размера с сохранением данных;.submat(),.rows(),.cols()— выделение подматриц;.diag()— доступ к диагонали матрицы;.t(),.st()— транспонирование матрицы;.i()— обращение квадратной матрицы;.min(),.max()— поиск минимального и максимального элемента;.is_finite(),.has_inf(),.has_nan()— проверка на корректность данных.
Сгенерированные матрицы и векторы
Библиотека включает удобные функции для создания специальных матриц и векторов.
Основные функции:
eye(n, m)— единичная матрица;ones(n, m),zeros(n, m)— матрица из единиц или нулей;randu(n, m),randn(n, m)— случайные числа (равномерное или нормальное распределение);linspace(a, b, n)— вектор с линейно распределёнными элементами;logspace(a, b, n)— вектор с логарифмически распределёнными элементами;toeplitz()— теплицева матрица.
Матричные и векторные функции
Armadillo предоставляет более 200 функций для обработки матриц и векторов, включая редукции, преобразования и статистику.
Основные функции:
accu(X)— сумма всех элементов;sum(X),prod(X)— сумма или произведение по строкам/столбцам;cumsum(X),cumprod(X)— кумулятивная сумма или произведение;min(X),max(X)— минимум или максимум по строкам/столбцам;mean(X),median(X),stddev(X)— статистические характеристики;dot(a, b),cross(a, b)— скалярное и векторное произведение;norm(X, p)— p-норма вектора или матрицы;sort(X),sort_index(X)— сортировка и получение индексов сортировки;unique(X)— уникальные элементы;vectorise(X)— преобразование матрицы в вектор.
Матричные разложения и решатели
Библиотека интегрируется с LAPACK для предоставления полного спектра матричных разложений и решения систем линейных уравнений.
Основные функции:
chol(X)— разложение Холецкого;eig_sym(X)— собственные значения и векторы симметричной матрицы;eig_gen(X)— собственные значения и векторы общей квадратной матрицы;lu(X)— LU-разложение;qr(X),qr_econ(X)— QR-разложение (полное или экономичное);svd(X),svd_econ(X)— сингулярное разложение (полное или экономичное);solve(A, b)— решение системы линейных уравнений (Ax = b);inv(X),pinv(X)— обратная и псевдообратная матрица;rank(X)— ранг матрицы.