armadillo
 
Armadillo
C++ linear algebra library

 
 
             
About
License
 FAQ 
 Docs 
Speed
Contact
Download

  • Armadillo is a C++ linear algebra library (matrix maths) aiming towards a good balance between speed and ease of use. The syntax is deliberately similar to Matlab.
     
  • Integer, floating point and complex numbers are supported, as well as a subset of trigonometric and statistics functions. Various matrix decompositions are provided through optional integration with LAPACK, or one of its high performance drop-in replacements (such as the multi-threaded MKL or ACML libraries).
     
  • A delayed evaluation approach is employed (at compile-time) to combine several operations into one and reduce (or eliminate) the need for temporaries. This is accomplished through recursive templates and template meta-programming.
     
  • Useful for conversion of research code into production environments, or if C++ has been decided as the language of choice, due to speed and/or integration capabilities.
     
  • The library is open-source software, and is distributed under a license that is useful in both open-source and commercial/proprietary contexts.
     
  • Primarily developed at NICTA (Australia) by Conrad Sanderson, with contributions from around the world.
     
  • Download latest version
     


NEWS

2013-05-12

Version 3.820.0   (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-27

Version 3.810.2
  • minor fix for initialisation of sparse matrices
  • minor fix for linking with MKL on Ubuntu systems



2013-04-19

Version 3.810.0   (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-26

Version 3.800.2
  • workaround for a bug in ATLAS 3.8 on 64 bit systems
  • faster matrix-vector multiply for small matrices
  • minor fix for installation on Mac OS X systems



2013-03-01

Version 3.800.0   (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-29

Version 3.6.2



2013-01-21

Recent papers developed with the aid of Armadillo:
 



2012-12-17

Version 3.6.1
  • faster trace()
  • fix for handling sparse matrices by dot()
  • fixes for interactions between sparse and dense matrices



2012-12-07

Version 3.6.0   (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-11-02

Version 3.4.4
  • fix for handling complex numbers by sparse matrices
  • fix for minor memory leak by sparse matrices



2012-10-31

Thomas Natschlaeger has provided bindings/interface to Python



2012-10-04

Version 3.4.3
  • fix for aliasing issue in diagmat()
  • fix for speye() signature
  • fixes for handling empty sparse matrices
  • minor fixes for handling sparse submatrix views
  • minor speedups for sparse matrices
  • workaround for a bug in the Mac OS X accelerate framework
  • added documentation for saving & loading matrices in HDF5 format
  • faster dot() and cdot() for complex numbers



2012-09-07

Version 3.4.0   (Ku De Ta)



2012-09-05

Version 3.2.5
  • workaround for a regression (bug) in GCC 4.7.0 and 4.7.1
  • minor fix for non-contiguous submatrix views
  • minor fix for compiling without debugging enabled (aka release mode)
  • better detection of ATLAS during installation on Fedora and Red Hat systems



2012-05-18

Version 3.2.0   (Creamfields)



2012-04-09

Version 3.0.0   (Antarctic Chilli Ranch)



2012-03-05

Version 2.4.4



2011-12-12

Version 2.4.2



2011-12-05

Version 2.4.0   (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




↓ earlier news ↓



2011-08-27

Version 2.2.3



2011-08-02

Version 2.2.1   (Blue Skies Debauchery)



2011-07-16

Version 2.0.2



2011-06-29

Version 2.0.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