Armadillo C++ matrix library / News: Recent posts

Armadillo C++ linear algebra: corrections for OpenMP support

Armadillo 7.950 contains corrections for OpenMP support.
Users of earlier versions (such as 7.900) are encouraged to upgrade.

Available from:

Posted by Conrad Sanderson 2017-06-20

Armadillo C++ linear algebra: version 7.950

Version 7.950 contains enhancements and speedups.
Available from

  • expanded accu() and sum() to use OpenMP for processing expressions with computationally expensive element-wise functions
  • expanded trimatu() and trimatl() to allow specification of the diagonal which delineates the boundary of the triangular part
Posted by Conrad Sanderson 2017-05-31

Armadillo C++ linear algebra: version 7.900

Version 7.900 contains enhancements and speedups.
Available from

  • expanded clamp() to handle cubes
  • computationally expensive element-wise functions (such as exp(), log(), cos(), etc) can now be automatically sped up via OpenMP; this requires a C++11/C++14 compiler with OpenMP 3.0+ support
  • for GCC and clang compilers use the following options to enable both C++11 and OpenMP: -std=c++11 -fopenmp
Posted by Conrad Sanderson 2017-05-08

Armadillo C++ linear algebra: relicensed to Apache License 2.0

Armadillo versions 7.800 and onwards are now licensed under Apache License 2.0.

The Apache license is a permissive license similar to the MIT and BSD licenses, but also provides a grant of patent rights from contributors to users. As such, the Apache license can be thought of as an improved version of the MIT and BSD licenses.

The Apache license allows Armadillo to be used in proprietary software, without releasing the source code.
The main conditions of the license simply require preservation of the attribution and copyright notices. This can be placed in the documentation and/or other materials provided with the software. ... read more

Posted by Conrad Sanderson 2017-02-17

speeding up Python / NumPy code using Armadillo

There are tools available for speeding up Python / NumPy code:

  • PyJet - simple way to make Python, and especially NumPy code, run faster; achieved by transparently converting Python/NumPy operations to Armadillo based C++ code

  • armanpy - set of SWIG interface files for generating Python bindings to Armadillo based C++ code... read more

Posted by Conrad Sanderson 2016-12-21

new overview article about Armadillo

There is a new overview article about Armadillo, published in the Journal of Open Source Software:

  • Citation details:
    Conrad Sanderson and Ryan Curtin.
    Armadillo: a template-based C++ library for linear algebra.
    Journal of Open Source Software, Vol. 1, pp. 26, 2016.
Posted by Conrad Sanderson 2016-06-17

Armadillo C++ linear algebra: version 7.200

Version 7.200 contains new features, enhancements and speedups.
Available from

  • added .index_min() and .index_max()
  • expanded ind2sub() to handle vectors of indices
  • expanded sub2ind() to handle matrix of subscripts
  • expanded expmat(), logmat() and sqrtmat() to optionally return a bool indicating success
  • faster handling of compound expressions by vectorise()
Posted by Conrad Sanderson 2016-06-06

Armadillo C++ linear algebra: version 7.100

Version 7.100 contains new features, enhancements and speedups.
Available from

Changes since version 6.100:
- added erf(), erfc(), lgamma()
- added .head_slices() and .tail_slices() to subcube views
- added trapz() for numerical integration
- added logmat() for calculating the matrix logarithm
- added regspace() for generating vectors with regularly spaced elements
- added logspace() for generating vectors with logarithmically spaced elements
- added approx_equal() for determining approximate equality
- added shift() for circular shifts of elements
- added sqrtmat() for finding the square root of a matrix
- added conv2() for 2D convolution
- added stand-alone kmeans() function for clustering data
- added trunc()
- added ind2sub() and sub2ind()
- added .for_each() to Mat, Row, Col, Cube and field classes
- added rcond() for estimating the reciprocal condition number
- expanded .save() and .load() with hdf5_binary_trans file type, to save/load data with columns transposed to rows
- expanded sum(), mean(), min(), max() to handle cubes
- expanded Cube class to handle arbitrarily sized empty cubes (eg. 0x5x2)
- extended conv() to optionally provide central convolution
- expanded each_col(), each_row() and each_slice() to handle C++11 lambda functions
- expanded solve() to find approximate solutions for rank-deficient systems
- expanded diagmat() to handle non-square matrices and arbitrary diagonals
- expanded trace() to handle non-square matrices
- faster handling of multiply-and-accumulate by accu() when using Intel MKL, ATLAS or OpenBLAS
- faster handling of non-contiguous submatrix views in compound expressions
- eigs_sym(), eigs_gen() and svds() now use a built-in reimplementation of ARPACK for real (non-complex) matrices; contributed by Yixuan Qiu
- spsolve() now requires SuperLU 5.2

Posted by Conrad Sanderson 2016-05-24

Armadillo C++ linear algebra: version 6.100

Version 6.100 contains new features, speedups and enhancements.
Available from

Changes since version 5.000:

  • faster norm() and normalise() when using Intel MKL, ATLAS or OpenBLAS
  • faster handling of submatrix rows
  • faster clamp()
  • faster flipud()
  • faster row-wise sum(), cumsum() mean(), min(), max()
  • faster sparse sum()
  • faster handling of compound expressions by join_rows() and join_cols()
  • added Schur decomposition: schur()
  • added generalised Schur decomposition: qz()
  • added .has_inf() and .has_nan()
  • added orth() for finding the orthonormal basis of range space
  • added null() for finding the orthonormal basis of null space
  • added .each_slice() for repeated matrix operations on each slice of a cube
  • added find_unique() for finding indices of unique values
  • added diff() for calculating differences between consecutive elements
  • added cumprod() for calculating cumulative product
  • added interp1() for 1D interpolation
  • added .is_sorted() for checking whether a vector or matrix has sorted elements
  • expanded join_slices() to handle joining cubes with matrices
  • expanded .each_col() and .each_row() to handle out-of-place operations
  • expanded sparse matrix class with .set_imag() and .set_real()
  • expanded imag(), real() and conj() to handle sparse matrices
  • expanded diagmat(), reshape() and resize() to handle sparse matrices
  • expanded unique() to handle complex numbers
  • expanded object constructors and generators to handle size() based specification of dimensions
  • expanded element initialisation to handle nested initialiser lists (C++11)
  • fix for k-means clustering in gmm_diag class
  • fixes for handling sparse matrices & sparse submatrix views
  • stricter handling of matrix objects by hist() and histc()
  • advanced constructors for using auxiliary memory now have the default of strict = false
  • Cube class now delays allocation of .slice() related structures until needed
  • updated physical constants to NIST 2014 CODATA values
  • workarounds for bugs in GCC, Intel and MSVC C++ compilers
Posted by Conrad Sanderson 2015-10-02

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

JavaScript is required for this form.

No, thanks