armadillo
 
Armadillo
C++ linear algebra library

 
 
      
About
License
Questions
API Docs
Speed
Authors
Download

  • Armadillo is a high quality C++ linear algebra library, aiming towards a good balance between speed and ease of use; the syntax (API) is deliberately similar to Matlab
     
  • Useful for development of algorithms in machine learning, pattern recognition, signal processing, bioinformatics, statistics, etc
     
  • Provides efficient classes for vectors, matrices and cubes, as well as many functions which operate on the classes (eg. contiguous and non-contiguous submatrix views)
     
  • Integer, floating point and complex numbers are supported, as well as a subset of trigonometric and statistics functions
     
  • Various matrix decompositions are provided through integration with LAPACK, or one of its high performance drop-in replacements (such as the multi-threaded Intel MKL, or AMD ACML, or OpenBLAS libraries)
     
  • An automatic expression evaluator (via template meta-programming) combines several operations to increase efficiency
     
  • Useful for algorithm development directly in C++, or quick conversion of research code into production environments
     
  • The library is open-source software, distributed under a license useful in both open-source and proprietary contexts
     
  • Primarily developed at NICTA (Australia) by Conrad Sanderson, with contributions from around the world
     
  • download latest version  |  browse documentation  |  news
     


NEWS

2014-09-19

Version 4.450   (Spring Hill Fort)
  • faster handling of matrix transposes within compound expressions
  • expanded symmatu()/symmatl() to optionally disable taking the complex conjugate of elements
  • expanded sort_index() to handle complex vectors
  • expanded the gmm_diag class with functions to generate random samples
  • disabled automatic detection of HDF5 to prevent compilation problems



2014-08-29

MLPACK 1.0.10 released; MLPACK is a library for machine learning and pattern recognition, built on top of Armadillo



2014-08-19

Version 4.400   (Winter Shark Alley)
  • faster handling of subvectors by dot()
  • faster handling of aliasing by submatrix views
  • expanded batch insertion constructors for sparse matrices to add values at repeated locations
  • added clamp() for clamping values to be between lower and upper limits
  • added gmm_diag class for statistical modelling using Gaussian Mixture Models (GMM);
    includes multi-threaded implementation of k-means clustering and Expectation Maximisation (EM) algorithms



2014-07-22

Armadillo is used extensively in a self-driving car project at University of Ulm



2014-07-02

Version 4.320   (Daintree Tea Raider)
  • expanded eigs_sym() and eigs_gen() to use an optional tolerance parameter
  • expanded eig_sym() to automatically fall back to standard decomposition method if divide-and-conquer fails
  • automatic installer enables use of C++11 random number generator when using gcc 4.8.3+ in C++11 mode



2014-05-16

Scyllarus is a toolbox for processing hyper-spectral data, using Armadillo as the math library



2014-05-02

Version 4.300   (Medieval Cornea Scraper)



2014-04-09

Recent papers developed with the aid of Armadillo:
 



2014-04-07

Version 4.200   (Flintlock Swoop)
  • faster transpose of sparse matrices
  • more efficient handling of aliasing during matrix multiplication
  • faster inverse of matrices marked as diagonal



2014-02-28

Version 4.100   (Dirt Cruiser)
  • added normalise() for normalising vectors to unit p-norm
  • extended the field class to handle 3D layout
  • extended eigs_sym() and eigs_gen() to obtain eigenvalues of various forms (eg. largest or smallest magnitude)
  • automatic SIMD vectorisation of elementary expressions (eg. matrix addition) when using Clang 3.4+ with -O3 optimisation
  • faster handling of sparse submatrix views
  • workaround for a bug in LAPACK 3.4



2014-01-05

Version 4.000   (Feral Steamroller)
  • added eigen decompositions of sparse matrices: eigs_sym() and eigs_gen()
  • added eigen decomposition for pair of matrices: eig_pair()
  • added simpler forms of eig_gen()
  • added condition number of matrices: cond()
  • expanded find() to handle cubes
  • expanded subcube views to access elements specified in a vector
  • template argument for running_stat_vec expanded to accept vector types
  • more robust fast inverse of 4x4 matrices
  • faster divide-and-conquer decompositions are now used by default for eig_sym(), pinv(), princomp(), rank(), svd(), svd_econ()
  • the form inv(sympd(X)) no longer assumes that X is positive definite; use inv_sympd() instead
  • added MEX connector for interfacing Octave/Matlab with Armadillo matrices (contributed by George Yammine)



2013-12-06

Version 3.930   (Dragon's Back)
  • added divide-and-conquer variant of svd_econ(), for faster SVD
  • added divide-and-conquer variant of pinv(), for faster pseudo-inverse
  • added element-wise variants of min() and max()
  • added size() based specifications of submatrix view sizes
  • added randi() for generating matrices with random integer values
  • added inplace_trans() for memory efficient in-place transposes (contributed by Alexandre Drouin)
  • added more intuitive specification of sort direction in sort() and sort_index()
  • added more intuitive specification of method in det(), .i(), inv() and solve()
  • added more precise timer for the wall_clock class when using C++11



2013-09-27

Version 3.920   (Agencia Nacional Stasi)
  • faster .zeros()
  • faster round(), exp2() and log2() when using C++11
  • added signum function: sign()
  • added move constructors when using C++11
  • added 2D fast Fourier transform: fft2()
  • added .tube() for easier extraction of vectors and subcubes from cubes
  • added specification of a fill type during construction of Mat, Col, Row and Cube classes, eg. mat X(4, 5, fill::zeros)



2013-08-12

Version 3.910   (Pyrenees)
  • faster multiplication of a matrix with a transpose of itself, ie. X*X.t() and X.t()*X
  • added vectorise() for reshaping matrices into vectors
  • added all() and any() for indicating presence of elements satisfying a relational condition



2013-07-01

The Tech Street Journal has an article on Armadillo



2013-06-04

Version 3.900   (Bavarian Sunflower)
  • added automatic SSE2 vectorisation of elementary expressions (eg. matrix addition) when using GCC 4.7+ with -O3 optimisation
  • added support for saving & loading of cubes in HDF5 format, contributed by Szabolcs Horvat
  • faster median(), contributed by Ruslan Shestopalyuk
  • faster handling of compound expressions with transposes of submatrix rows
  • faster handling of compound expressions with transposes of complex vectors



2013-05-12

Version 3.820   (Mt Cootha)
  • faster as_scalar() for compound expressions
  • faster transpose of small vectors
  • faster matrix-vector product for small vectors
  • faster multiplication of small fixed size matrices



2013-04-19

Version 3.810   (Newell Highway)
  • added fast Fourier transform: fft()
  • added handling of .imbue() and .transform() by submatrices and subcubes
  • added batch insertion constructors for sparse matrices
  • minor fix for multiplication of complex sparse matrices
  • better detection of recent Intel MKL versions during installation



2013-03-01

Version 3.800   (Miami Beach)
  • Armadillo is now licensed using the Mozilla Public License 2.0
  • added .imbue() for filling a matrix/cube with values provided by a functor or lambda expression
  • added .swap() for swapping contents with another matrix
  • added .transform() for transforming a matrix/cube using a functor or lambda expression
  • added round() for rounding matrix elements towards nearest integer
  • faster find()
  • fixes for handling non-square matrices by qr() and qr_econ()
  • minor fixes for handling empty matrices
  • reduction of pedantic compiler warnings



2013-01-21

Recent papers developed with the aid of Armadillo:
 



2012-12-07

Version 3.6   (Piazza del Duomo)
  • faster handling of compound expressions with submatrices and subcubes
  • added support for loading matrices as text files with NaN and Inf elements
  • added stable_sort_index(), which preserves the relative order of elements with equivalent values
  • added handling of sparse matrices by mean(), var(), norm(), abs(), square(), sqrt()
  • added saving and loading of sparse matrices in arma_binary format



2012-10-31

Thomas Natschlaeger has provided bindings/interface to Python



2012-09-07

Version 3.4   (Ku De Ta)



2012-05-18

Version 3.2   (Creamfields)



2012-04-09

Version 3.0   (Antarctic Chilli Ranch)

↓ earlier news ↓



2011-12-05

Version 2.4   (Loco Lounge Lizard)
  • added shorter forms of transposes: .t() and .st()
  • added optional use of 64 bit indices, allowing matrices to have more than 4 billion elements
  • added experimental support for C++11 initialiser lists
  • faster pinv()
  • faster inplace transpose
  • faster handling of expressions with diagonal views
  • fixes for handling expressions with aliasing and submatrices
  • fixes for linking on Ubuntu and Debian systems
  • fixes for inconsistencies in interactions between matrices and cubes
  • refactored code to eliminate warnings when using the Clang C++ compiler
  • .print_trans() and .raw_print_trans() are deprecated



2011-08-02

Version 2.2   (Blue Skies Debauchery)



2011-06-29

Version 2.0   (Carnivorous Sugar Glider)



2011-04-18

Version 1.2.0   (Unscrupulous Carbon Emitter)
  • Added ability to use Blas & Lapack libraries with capitalised function names
  • Reduction of pedantic compiler warnings



2011-03-31

Version 1.1.92   (Jurassic Barbecue)
  • Bugfix in cor()
  • Automatic installation now requires CMake ≥ 2.6



2011-03-22

Version 1.1.90   (Inside Job)



2011-03-10

Version 1.1.8   (Kangaroo Steak)



2011-03-02

Version 1.1.6   (Baby Carpet Shark)



2011-02-18

Version 1.1.4   (Manta Lodge)
  • Faster sort()
  • Updated installation to detect recent versions of Intel's MKL
  • Added interpretation of arbitrary "flat" subcubes as matrices



2011-02-02

Version 1.1.2   (Flood Kayak)
  • Faster prod()
  • Faster solve() for compound expressions
  • Fix for compilation using GCC's C++0x mode
  • Fix for matrix handling by subcubes



2010-12-23

Version 1.1.0   (Climate Vandal)



2010-11-23

Version 1.0.0   (Antipodean Antileech)
  • After 2½ years of collaborative development, we are proud to release the 1.0 milestone version
  • Many thanks are extended to all contributors and bug reporters



2010-11-11

Version 0.9.92   (Wall Street Gangster)
  • Fixes for compilation issues under the Intel C++ compiler
  • Added matrix norms



2010-10-14

Version 0.9.90   (Water Dragon)
  • Added unsafe_col()
  • Speedups and bugfixes in lu()
  • Minimisation of pedantic compiler warnings



2010-09-28

Overview Tech Report



2010-09-21

Version 0.9.80   (Chihuahua Muncher)



2010-09-01

Version 0.9.70   (Subtropical Winter Safari)



2010-08-04

Version 0.9.60   (Killer Bush Turkey)
  • More flexible reshape(), allowing significantly different matrix sizes
  • Added matrix initialisation via the << operator
  • Fixes for compilation issues under Mac OS X with GCC 4.2/4.0 hybrid



2010-07-14

Version 0.9.52   (Monkey Wrench)
  • Bugfixes for saving complex cubes
  • Workarounds to remove warnings under certain dodgy compilers



2010-07-07

Version 0.9.50   (Flying Spaghetti Monster)



2010-06-02

Version 0.9.10   (Chilli Espresso)
  • Speedups for find() and relational operators
  • Speedups for expressions involving mixed matrix types
  • More consistent success indication by decomposition functions



2010-05-14

Version 0.9.8   (Dog's Breakfast)
  • Added handling of interactions between complex scalars and non-complex matrices
  • Minor bugfixes for compilation issues under certain compilers



2010-04-28

Version 0.9.6   (Chimerican Climate Cabal)



2010-03-16

Version 0.9.4   (Cat Herder)
  • Added cross()
  • Bugfixes for inplace addition of particular vector multiplication expressions



2010-03-03

NICTA at CeBIT in Hannover
Armadillo is used in NICTA's face-based identity inference product demonstrators (part of the Advanced Surveillance project). See this page for more info on NICTA's presence at CeBIT.



2010-03-02

Version 0.9.2   (Cuban Cigar)
  • Minor speedups
  • Added princomp_cov()
  • Bugfixes in complex-number versions of several functions



2010-02-05

Version 0.9.0   (Retoxed Feral)
  • Extended and overhauled expression evaluation framework, for more efficient handling of compound expressions
  • There is a small but important API change -- see the docs for details
  • Added a conversion table between Matlab/Octave and Armadillo syntax
  • Added saving/loading of matrices using streams
  • Added log_det(), princomp(), fliplr(), flipud()
  • More accurate var() and stddev()



2010-01-27

Version 0.8.2   (Colombian Coffee)
  • Added as_scalar(), for forward compatibility with 0.9.x
  • Miscellaneous bugfixes



2009-12-14

Version 0.8.0   (Restless Critter)
  • Added pinv(), rank(), kron(), prod(), eps(), shuffle()
  • Added ‘running_stat_vec’ class, for on-the-fly statistics of vectors
  • Improvements and bugfixes in handling of submatrix views
  • Speedups for some compound expressions
  • Initial support for dodgy compilers



2009-10-26

Version 0.7.2   (Tequila Sunrise)
  • Added covariance and correlation functions
  • Added simpler form of lu()
  • Faster repmat() and reshape()
  • Better detection of external libraries during installation



2009-10-07

Version 0.7.0   (Unshackled Mongrel)
  • Added the Cube class (aka "3D matrix" or a set of matrices with contiguous memory)
  • Added creation of Mat instances using auxiliary memory
  • Added repmat()
  • Bugfixes for det() and lu()



2009-06-25

Version 0.6.12   (Ye Greene Beaste)
  • Added raw_print() and a collection of physical constants
  • Code cleanup for better conformance to the C++ standard
  • Miscellaneous documentation and installation improvements



2009-05-20

Version 0.6.11
  • Bug fix for solve() when using complex numbers
  • More elaborate class destructors for better debugging of user code
  • Miscellaneous documentation and installation improvements



2009-05-02

Version 0.6.10
  • Added eigen decomposition of generic (non-symmetric) matrices
  • Function eig() renamed to eig_sym()



2009-04-23

Version 0.6.8
  • Better installation on MacOS X
  • Colour PPM images can now be loaded as fields of matrices



2009-04-08

Version 0.6.6
  • Better installation on 64 bit systems, especially when using CMake 2.6
  • Fields of strings can be now loaded & saved as plain text files
  • Bug fix for template detection of combined multiply and addition operations



2009-04-02

Version 0.6.4
  • Added running_stat class for on-the-fly statistics
  • Renamed main classes for better code readability
  • Performance tweaks, which can result in speedups of 30% for small matrices



2009-03-26

Version 0.6.2
Fixes for interactions between matrices with different element types



2009-03-24

Version 0.6.0
Added functionality:
  • solve(), for solving systems of linear equations
  • svd(), singular value decomposition
  • expressions can now have mixed matrix types
  • complex number versions of statistics functions
  • reworked operators, providing more flexibility

Bug fixes:
  • sign of scalar produced by det()
  • handling of single row and column submats by statistics functions



2009-03-11

Version 0.5.2
Added functionality:
  • subfields
  • sort_index()

Bug fixes:
  • pow() applied to integer matrices (gcc < 4.3)
  • multiplication of submats with a scalar
  • missing division operators




2009-03-09

Version 0.5.0
Added functionality:
  • Cholesky and QR decompositions
  • element-wise division
  • comparison operators
  • more elegant restriction of template parameters

Bug fixes:
  • handling of diagonal matrices created from vectors
  • compilation of examples under MacOS X

Other changes:
  • faster matrix inverse
  • license change to LGPL v3+
  • updated and re-arranged documentation
  • easier installation when using the .tar.gz package




2009-01-28

Version 0.4.0
Bug fixes and added functionality:
  • easier configuration and installation
  • statistics functions
  • more functions for handling complex numbers



2009-01-16

Version 0.3.0
Added functionality:
  • handling of complex numbers as well as other types
  • added trigonometric functions



2008-12-23

Version 0.2.1
Fixes for several minor bugs.



2008-12-12

Version 0.2.0
More functionality, bug fixes and improved user documentation.



2008-11-04

Version 0.1.0
Initial proof-of-concept release.

Get Armadillo C++ matrix library at SourceForge.net. Fast, secure and Free Open Source software downloads