Armadillo Changelog

What's new in Armadillo 12.8.2

Apr 7, 2024
  • Changes since 12.8.1:
  • Workaround for FFTW3 header clash
  • Workaround in testing framework for issue under macOS
  • Minor cleanups to reduce code bloat
  • Improved documentation

New in Armadillo 12.8.1 (Mar 3, 2024)

  • Workaround in norm() for yet another bug in macOS accelerate framework

New in Armadillo 12.8.0 (Feb 8, 2024)

  • Changes since 12.6:
  • Faster detection of symmetric expressions by pinv() and rank()
  • Expanded shift() to handle sparse matrices
  • Expanded conv_to for more flexible conversions between sparse and dense matrices
  • Added cbrt()
  • More compact representation of integers when saving matrices in CSV format

New in Armadillo 12.6.7 (Dec 26, 2023)

  • Fix for saving sparse matrices as CSV files

New in Armadillo 12.6.6 (Oct 31, 2023)

  • Fix eigs_sym(), eigs_gen() and svds() to generate deterministic results in ARPACK mode

New in Armadillo 12.6.5 (Oct 16, 2023)

  • Fix for corner-case bug in handling sparse matrices with no non-zero elements
  • Various fixes in the documentation

New in Armadillo 12.6.4 (Sep 7, 2023)

  • Changes:
  • Workarounds for bugs in Apple accelerate framework
  • Fix incorrect calculation of rcond for band matrices in solve()
  • Remove expensive and seldom used optimisations, leading to faster compilation times

New in Armadillo 12.6.3 (Aug 29, 2023)

  • Changes:
  • Fix for corner-case in loading CSV files with headers
  • For consistent file handling, all .load() functions now open text files in binary mode; to revert to previous behaviour, define ARMA_DONT_TREAT_TEXT_AS_BINARY before including the Armadillo header

New in Armadillo 12.6.2 (Aug 12, 2023)

  • Changes:
  • Use thread-safe Mersenne Twister as the default RNG on all platforms
  • Use unique RNG seed for each thread within multi-threaded execution (such as OpenMP)
  • Explicitly document arma_rng::set_seed() and arma_rng::set_seed_random()

New in Armadillo 12.6.1 (Jul 27, 2023)

  • Changes:
  • Fix regression in multiplication of dense vectors by sparse matrices
  • Fix speed regression in handling of complex sparse matrices by eigs_gen()

New in Armadillo 12.6.0 (Jul 24, 2023)

  • Faster multiplication of dense vectors by sparse matrices (and vice versa)
  • Faster eigs_sym() and eigs_gen()
  • Faster conv() and conv2() when using OpenMP
  • More efficient move constructors in dense vector classes
  • Added diags() and spdiags() for generating band matrices from set of vectors

New in Armadillo 12.4.1 (Jun 18, 2023)

  • Changes:
  • Fix bug in SpMat::shed_cols()
  • Functions such as .is_finite() and find_nonfinite() will now emit a runtime warning when compiled in fast math mode (gcc and clang: -ffast-math or -Ofast); such compilation mode disables detection of non-finite values

New in Armadillo 12.4.0 (May 25, 2023)

  • Improvements since 12.2:
  • Added norm2est() for finding fast estimates of matrix 2-norm (spectral norm)
  • Added vecnorm() for obtaining the vector norm of each row or column of a matrix

New in Armadillo 12.2.0 (Apr 4, 2023)

  • Improvements since 12.0:
  • more efficient use of FFTW3 by fft() and ifft()
  • faster in-place element-wise multiplication of sparse matrices by dense matrices
  • added spsolve_factoriser class to allow reuse of sparse matrix factorisation for solving systems of linear equations

New in Armadillo 12.0.1 (Feb 24, 2023)

  • fix regression (mis-compilation) in shift() function

New in Armadillo 12.0.1 (Feb 24, 2023)

  • fix regression (mis-compilation) in shift() function

New in Armadillo 12.0.0 (Feb 21, 2023)

  • faster fft() and ifft() via optional use of FFTW3
  • faster min() and max()
  • faster index_min() and index_max()
  • added .col_as_mat() and .row_as_mat() which return matrix representation of cube column and cube row
  • added csv_optsstrict option to loading CSV files to interpret missing values as NaN
  • added check_for_zeros option to form 4 of sparse matrix batch constructors
  • inv() and inv_sympd() with options inv_optsno_ugly or inv_optsallow_approx now use a scaled threshold similar to pinv()
  • set_cout_stream() and set_cerr_stream() are now no-ops; instead use the options ARMA_WARN_LEVEL, or ARMA_COUT_STREAM, or ARMA_CERR_STREAM

New in Armadillo 11.4.4 (Feb 9, 2023)

  • Changes:
  • fix corner-case handling of NaN by interp1()
  • deprecated old functions .quiet_save() and .quiet_load()

New in Armadillo 11.4.3 (Dec 28, 2022)

  • Changes:
  • Fix corner case in pinv() when processing symmetric matrices
  • Improved documentation

New in Armadillo 11.4.2 (Oct 21, 2022)

  • More robust handling of corner cases in multi-threaded contexts
  • Improved documentation

New in Armadillo 11.4.1 (Oct 11, 2022)

  • Fix data race in Cube::slice()
  • Workarounds for false warnings emitted by GCC 12 when compiling with FORTIFY_SOURCE enabled

New in Armadillo 11.4.0 (Sep 22, 2022)

  • Faster handling of compound expressions by sum()
  • Extended pow() with various forms of element-wise power operations
  • Added find_nan() to find indices of NaN elements

New in Armadillo 11.2.4 (Sep 9, 2022)

  • Fix handling of std::move() involving matrices constructed with auxiliary memory

New in Armadillo 11.2.3 (Jul 12, 2022)

  • fix configuration and linking with the HDF5 library
  • fix Cube::insert_slices() to accept Cube::slice() as input

New in Armadillo 11.2.2 (Jul 4, 2022)

  • Fix incorrect and/or slow convergence in single-threaded versions of kmeans(), gmm_diag::learn(), gmm_full::learn()

New in Armadillo 11.2.0 (Jun 11, 2022)

  • Changes since 11.1:
  • Faster handling of sparse submatrix column views by norm(), accu(), nonzeros()
  • Extended randu() and randn() to allow specification of distribution parameters
  • Internal refactoring, leading to faster compilation times

New in Armadillo 11.1.1 (May 15, 2022)

  • Changes:
  • Added inv_opts::no_ugly option to inv() and inv_sympd() to disallow inverses of poorly conditioned matrices
  • More efficient handling of rank-deficient matrices via inv_opts::allow_approx option in inv() and inv_sympd()
  • Better detection of rank deficient matrices by solve()
  • Faster handling of symmetric and diagonal matrices by cond()
  • Fixes for aliasing corner cases in solve()

New in Armadillo 11.1.0 (May 13, 2022)

  • Fix miscompilation of inv() and inv_sympd() functions when using inv_opts::allow_approx and inv_opts::tiny options

New in Armadillo 11.0.1 (Apr 14, 2022)

  • Fix miscompilation of inv() and inv_sympd() functions when using inv_opts::allow_approx and inv_opts::tiny options

New in Armadillo 11.0.0 (Apr 5, 2022)

  • Added variants of inv() and inv_sympd() that provide rcond (reciprocal condition number)
  • Expanded inv() and inv_sympd() with options inv_opts::tiny and inv_opts::allow_approx
  • Stricter handling of singular matrices by inv() and inv_sympd()
  • Stricter handling of non-sympd matrices by inv_sympd()
  • Stricter handling of non-finite matrices by pinv()
  • More robust handling of rank deficient matrices by solve()
  • Faster handling of diagonal matrices by rcond()
  • Changed eigs_sym() and eigs_gen() to use higher quality RNG
  • Quantile() and median() will now throw an exception if given matrices/vectors have NaN elements
  • Workaround for yet another bug in Intel MKL

New in Armadillo 11.0 RC 2 (Mar 28, 2022)

  • More robust handling of rank deficient matrices by solve()
  • Added variants of inv() and inv_sympd() that provide rcond (reciprocal condition number)
  • Stricter handling of sympd matrices by inv_sympd()
  • Faster handling of diagonal matrices by rcond()
  • Changed eigs_sym() and eigs_gen() to use higher quality RNG
  • Workaround for yet another bug in Intel MKL

New in Armadillo 10.8.2 (Feb 2, 2022)

  • Fix potential speed regression in pinv() and rank()

New in Armadillo 10.8.1 (Jan 31, 2022)

  • Fix interaction between OpenBLAS and LAPACK
  • Emit warning if find() is incorrectly used to locate NaN elements

New in Armadillo 10.8.0 (Jan 3, 2022)

  • Changes since 10.7:
  • Faster handling of symmetric matrices by pinv() and rank()
  • Faster handling of diagonal matrices by inv_sympd(), pinv(), rank()
  • Expanded norm() to handle integer vectors and matrices
  • Added datum::tau to replace 2p
  • Improvements to the documentation

New in Armadillo 10.7.5 / 10.8 RC2 (Dec 28, 2021)

  • Improved detection of symmetric/hermitian matrices by pinv() and rank()
  • Fixes for potential misdetection of symmetric matrices by several functions

New in Armadillo 10.7.5 (Dec 18, 2021)

  • Changes:
  • Fix aliasing bug in diagmat()
  • Fix detection of 2x2 triangular matrices

New in Armadillo 10.7.4 (Nov 23, 2021)

  • Faster handling of diagonal matrices by inv_sympd(), pinv(), rank()
  • More robust detection of incorrect data format by .load()
  • Added OPENBLAS_PROVIDES_LAPACK option to the CMake-based installer, to allow assuming that OpenBLAS provides LAPACK functions

New in Armadillo 10.7.3 (Nov 4, 2021)

  • Fix regression in alias handling by fliplr(), flipud(), reverse()
  • More robust handling of diagonal matrices by pinv()

New in Armadillo 10.7.2 (Nov 2, 2021)

  • More robust handling of diagonal matrices by pinv()

New in Armadillo 10.7.1 (Oct 8, 2021)

  • Fix regression in interactions between dense matrix subviews and sparse matrices
  • Improved documentation

New in Armadillo 10.6.2 (Aug 5, 2021)

  • Fix incorrect use of constexpr for handling fixed-size matrices and vectors.
  • Improved documentation.

New in Armadillo 10.6.0 (Jul 18, 2021)

  • Armadillo 10.6 has feature enhancements and speedups.

New in Armadillo 10.5.1 (May 30, 2021)

  • Changes:
  • more robust handling of low memory situations by .load()
  • workaround for RNG issue when using GCC on macOS

New in Armadillo 10.5.0 (May 22, 2021)

  • Changes since 10.4:
  • added .clamp() member function
  • expanded the standalone clamp() function to handle complex values
  • more efficient use of OpenMP
  • vector, matrix and cube constructors now initialise elements to zero by default; use the fill::none specifier, eg. mat X(4,5,fill::none), to disable element initialisation
  • the CMake based installer now detects FlexiBLAS by default under Linux

New in Armadillo 10.4.1 (Apr 23, 2021)

  • Changes:
  • Fix superfluous compiler warning in det()
  • Fix prototypes for SuperLU xGSTRF functions, affecting the shift-invert mode in eigs_sym() and eigs_gen()
  • Fix incorrect use of random numbers within the R environment, affecting RcppArmadillo
  • Minor improvements to the documentation

New in Armadillo 10.4.0 (Apr 5, 2021)

  • Faster handling of triangular matrices by log_det()
  • Added log_det_sympd() for log determinant of symmetric positive matrices
  • Added ARMA_WARN_LEVEL configuration option, to control the degree of emitted warning messages
  • Reduced the default degree of warning messages, so that failed decompositions, failed saving/loading, etc, no longer emit warnings

New in Armadillo 10.3.2 (Apr 5, 2021)

  • Faster handling of symmetric positive definite matrices by pinv()
  • Expanded .save() / .load() for dense matrices to handle coord_ascii format
  • For out of bounds access, element accessors now throw the more nuanced std::out_of_range exception, instead of only std::logic_error
  • Improved quality of random numbers

New in Armadillo 10.2.2 (Feb 26, 2021)

  • Workaround for macOS 11 / AppleClang 12.0 bug with thread_local
  • Fix division-by-zero corner case in pinv()
  • Fix handling of compound expressions by rcond()
  • Minor layout improvements in .brief_print()

New in Armadillo 9.900.1 (Jun 8, 2020)

  • Faster solve() for under/over-determined systems
  • Faster eig_gen() and eig_pair() for large matrices
  • Expanded eig_gen() and eig_pair() to optionally provide left and right eigenvectors

New in Armadillo 9.900 RC1 (Jun 5, 2020)

  • Faster solve() for under/over-determined systems
  • Faster eig_gen() and eig_pair() for large matrices
  • Expanded eig_gen() and eig_pair() to optionally provide left and right eigenvectors

New in Armadillo 9.870 RC 1 (Apr 22, 2020)

  • faster handling of matrix multiplication expressions by diagvec() and diagmat()
  • added trimatu_ind() and trimatl_ind()
  • more consistent detection of sparse vector expressions

New in Armadillo 9.800.1 (Oct 8, 2019)

  • Faster solve() in default operation; iterative refinement is no longer applied by default; use solve_opts::refine to explicitly enable refinement
  • Faster expmat()
  • Faster handling of triangular matrices by rcond()
  • Added .front() and .back()
  • Added .is_trimatu() and .is_trimatl()
  • Added .is_diagmat()

New in Armadillo 9.700.2 (Sep 2, 2019)

  • Faster handling of cubes by vectorise()
  • Faster handling of sparse matrices by nonzeros()
  • Faster row-wise index_min() and index_max()
  • Expanded join_rows() and join_cols() to handle joining up to 4 matrices
  • Expanded .save() and .load() to allow storing sparse matrices in CSV format
  • Added randperm() to generate a vector with random permutation of a sequence of integers
  • Miscellaneous performance improvements

New in Armadillo 9.700 RC1 (Aug 27, 2019)

  • Faster handling of cubes by vectorise()
  • Faster row-wise index_min() and index_max()
  • Expanded join_rows() and join_cols() to handle joining up to 4 matrices
  • Expanded .save() and .load() to allow storing sparse matrices in CSV format
  • Added randperm() to generate a vector with random permutation of a sequence of integers

New in Armadillo 9.400.2 (Apr 28, 2019)

  • Faster cov() and cor()
  • Added .as_col() and .as_row()
  • Expanded .shed_rows() / .shed_cols() / .shed_slices() to remove rows/columns/slices specified in a vector
  • Expanded vectorise() to handle sparse matrices
  • Expanded elementwise versions of max() and min() to handle sparse matrices
  • Optimised handling of sparse matrix expressions: sparse % (sparse + scalar) and sparse / (sparse + scalar)
  • Expanded eig_sym(), chol(), expmat_sym(), logmat_sympd(), sqrtmat_sympd(), inv_sympd() to print a warning if the given matrix is not symmetric
  • More consistent detection of vector expressions

New in Armadillo 9.400 RC1 (Apr 18, 2019)

  • RC1 contains new features, enhancements and speedups.

New in Armadillo 9.300.2 (Mar 22, 2019)

  • faster handling of compound complex matrix expressions by trace()
  • more efficient handling of element access for inplace modifications in sparse matrices
  • added .is_sympd() to check whether a matrix is symmetric/hermitian positive definite
  • added interp2() for 2D data interpolation
  • added expm1() and log1p()
  • expanded .is_sorted() with options "strictascend" and "strictdescend"
  • expanded eig_gen() to optionally perform balancing prior to decomposition... read more

New in Armadillo 9.200.5 (Dec 10, 2018)

  • Fix for linking issue when using fixed size matrices and vectors
  • Faster handling of common cases by princomp()
  • Documentation improvements

New in Armadillo 9.200.4 (Nov 6, 2018)

  • new features, enhancements and speedups.

New in Armadillo 9.200 RC3 (Oct 30, 2018)

  • Faster handling of symmetric positive definite matrices by rcond()
  • Faster transpose of matrices with size = 512x512
  • Faster handling of compound sparse matrix expressions by accu(), diagmat(), trace()
  • Added sinc()
  • Expanded sign() to handle scalar arguments
  • Expanded operators (*, %, +, -) to handle sparse matrices with differing element types (eg. multiplication of complex matrix by real matrix)
  • Expanded conv_to() to allow conversion between sparse matrices with differing element types
  • Expanded solve() to optionally allow keeping solutions of systems singular to working precision

New in Armadillo 9.200 RC1 (Sep 24, 2018)

  • Faster handling of symmetric positive definite matrices by rcond()
  • Faster handling of compound sparse matrix expressions by accu()
  • Added sinc()
  • Expanded solve() to optionally allow keeping solutions of systems singular to working precision

New in Armadillo 9.100.5 (Aug 16, 2018)

  • contains new features, enhancements and speedups.

New in Armadillo 9.100 RC1 (Aug 10, 2018)

  • Faster handling of symmetric/hermitian positive definite matrices by solve()
  • Faster handling of inv_sympd() in compound expressions
  • Added .is_symmetric()
  • Added .is_hermitian()
  • Expanded spsolve() to optionally allow keeping solutions of systems singular to working precision
  • New configuration options ARMA_OPTIMISE_SOLVE_BAND and ARMA_OPTIMISE_SOLVE_SYMPD

New in Armadillo 8.600.0 (Jun 29, 2018)

  • Added hess() for Hessenberg decomposition
  • Added .row(), .rows(), .col(), .cols() to subcube views
  • Expanded .shed_rows() and .shed_cols() to handle cubes
  • Expanded .insert_rows() and .insert_cols() to handle cubes
  • Expanded subcube views to allow non-contiguous access to slices
  • Improved tuning of sparse matrix element access operators
  • Faster handling of tridiagonal matrices by solve()
  • Faster multiplication of matrices with differing element types when using OpenMP
  • Fix for solve() to handle systems with irregularly structured band matrices
  • Moved source code repo from GitHub to GitLab

New in Armadillo 8.600.0 RC (Jun 12, 2018)

  • Added hess() for Hessenberg decomposition
  • Added .row(), .rows(), .col(), .cols() to subcube views
  • Expanded .shed_rows() and .shed_cols() to handle cubes
  • Expanded .insert_rows() and .insert_cols() to handle cubes
  • Faster handling of tridiagonal matrices by solve()
  • Faster multiplication of matrices with differing element types when using OpenMP

New in Armadillo 8.500 (Apr 21, 2018)

  • Faster handling of sparse matrices by kron() and repmat()
  • Faster transpose of sparse matrices
  • Faster sparse * dense matrix multiplication
  • Faster handling of sparse matrices by trace()
  • Faster element access in sparse matrices
  • Faster row iterators for sparse matrices
  • Faster handling of compound expressions by trace()
  • Added repelem() for replicating elements
  • Expanded normalise() to handle sparse matrices
  • Expanded .transform() and .for_each() to handle sparse matrices
  • Added reverse() for reversing order of elements
  • Added roots() for finding the roots of a polynomial

New in Armadillo 8.500 RC1 (Mar 26, 2018)

  • faster element access in sparse matrices
  • faster row iterators for sparse matrices
  • faster handling of compound expressions by trace()
  • expanded normalise() to handle sparse matrices
  • expanded .transform() and .for_each() to handle sparse matrices
  • added reverse() for reversing order of elements
  • added roots() for finding the roots of a polynomial

New in Armadillo 8.400 (Feb 19, 2018)

  • Faster handling of sparse matrices by repmat()
  • Faster loading of CSV files
  • Expanded kron() to handle sparse matrices
  • Expanded index_min() and index_max() to handle cubes
  • Expanded randi(), randu(), randn(), randg() to output single scalars
  • Added submatrix & subcube iterators
  • Added normcdf()
  • Added mvnrnd()
  • Added chi2rnd() for generation of chi-squared random numbers
  • Added wishrnd() and iwishrnd() for generation of random Wishart matrices

New in Armadillo 8.400 RC1 (Feb 9, 2018)

  • Faster handling of sparse matrices by repmat()
  • Faster loading of CSV files
  • Expanded kron() to handle sparse matrices
  • Expanded index_min() and index_max() to handle cubes
  • Expanded randi(), randu(), randn(), randg() to output single scalars
  • Added submatrix & subcube iterators
  • Added normcdf()
  • Added chi2rnd() for generation of chi-squared random numbers
  • Added wishrnd() and iwishrnd() for generation of random Wishart matrices

New in Armadillo 8.300.1 (Dec 4, 2017)

  • Fixes for reading elements in sparse matrices using multiple threads
  • Fixes for accessing subfields of 3D fields

New in Armadillo 8.200.2 (Nov 13, 2017)

  • Version 8.200.2 is a maintenance release, containing workarounds for older compilers and several fixes for OpenMP related issues. Users are encouraged to update.

New in Armadillo 8.200.1 (Oct 30, 2017)

  • Added intersect() for finding common elements in two vectors/matrices
  • Expanded affmul() to handle non-square matrices
  • Faster handling of aliasing in element-wise max() and min()

New in Armadillo 7.500.0 (Oct 19, 2016)

  • 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.

New in Armadillo 7.200.1 (Jun 6, 2016)

  • 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()

New in Armadillo 6.600.4 (Mar 15, 2016)

  • expanded sum(), mean(), min(), max() to handle cubes
  • expanded Cube class to handle arbitrarily sized empty cubes (eg. 0x5x2)
  • added shift() for circular shifts of elements
  • added sqrtmat() for finding the square root of a matrix
  • fix for gmm_diag when using Mahalanobis distance

New in Armadillo 6.600.1 Test (Mar 1, 2016)

  • expanded sum(), mean(), min(), max() to handle cubes
  • expanded Cube class to handle arbitrarily sized empty cubes (eg. 0x5x2)

New in Armadillo 6.500.4 (Jan 27, 2016)

  • added conv2() for 2D convolution
  • added stand-alone kmeans() function for clustering data
  • added trunc()
  • extended conv() to optionally provide central convolution
  • faster handling of multiply-and-accumulate by accu() when using Intel MKL, ATLAS or OpenBLAS

New in Armadillo 6.500.2 Test (Jan 20, 2016)

  • faster handling of multiply-and-accumulate by accu()

New in Armadillo 6.500.1 Test (Jan 18, 2016)

  • added conv2() for 2D convolution
  • added stand-alone kmeans() function for clustering data
  • extended conv() to optionally provide central convolution

New in Armadillo 6.200.4 (Dec 16, 2015)

  • expanded each_col(), each_row() and each_slice() to handle C++11 lambda functions
  • added ind2sub() and sub2ind()
  • fixes for corner cases in the gmm_diag class

New in Armadillo 6.300.0 Test (Dec 2, 2015)

  • expanded solve() to find approximate solutions for rank-deficient systems
  • faster handling of non-contiguous submatrix views in compound expressions
  • added .for_each() to Mat, Row, Col, Cube and field classes
  • added rcond() for estimating the reciprocal condition number

New in Armadillo 6.200.4 (Nov 21, 2015)

  • contains bug fixes for sparse eigen decomposition.

New in Armadillo 6.200.1 (Nov 21, 2015)

  • Version 6.200 contains feature enhancements and minor bug fixes.
  • Available from http://arma.sourceforge.net/download.html
  • expanded diagmat() to handle non-square matrices and arbitrary diagonals
  • expanded trace() to handle non-square matrices
  • correction for datum::Z_0 constant

New in Armadillo 6.100.1 (Nov 21, 2015)

  • 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

New in Armadillo 5.400.2 (Aug 17, 2015)

  • added find_unique() for finding indices of unique values
  • added diff() for calculating differences between consecutive elements
  • added cumprod() for calculating cumulative product
  • added null() for finding the orthonormal basis of null space
  • expanded interp1() to handle repeated locations
  • expanded unique() to handle complex numbers
  • faster flupud()
  • faster row-wise cumsum()
  • fix for k-means clustering in gmm_diag class

New in Armadillo 5.300.0 (Aug 10, 2015)

  • added generalised Schur decomposition: qz()
  • added .has_inf() and .has_nan()
  • expanded interp1() to handle out-of-domain locations
  • 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
  • faster sparse sum()
  • faster row-wise sum(), mean(), min(), max()
  • updated physical constants to NIST 2014 CODATA values
  • fixes for handling sparse submatrix views
  • Armadillo can make use of GPUs by linking with NVIDIA NVBLAS (a GPU-accelerated implementation of BLAS),
  • or by linking with AMD ACML (which can use GPUs via OpenCL)

New in Armadillo 5.200.2 (Jun 25, 2015)

  • bugfix in interp1()
  • Armadillo can make use of GPUs by linking with NVIDIA NVBLAS (a GPU-accelerated implementation of BLAS), or by linking with AMD ACML (which can use GPUs via OpenCL)

New in Armadillo 5.200.1 (May 26, 2015)

  • Added orth() for finding the orthonormal basis of the range space of a matrix
  • Expanded element initialisation to handle nested initialiser lists (C++11)
  • Workarounds for bugs in GCC, Intel and MSVC C++ compilers

New in Armadillo 5.100.1 (May 1, 2015)

  • added interp1() for 1D interpolation
  • added .is_sorted() for checking whether a vector or matrix has sorted elements
  • updated physical constants to NIST 2010 CODATA values

New in Armadillo 5.000.0 (Apr 14, 2015)

  • added spsolve() for solving sparse systems of linear equations
  • added svds() for singular value decomposition of sparse matrices
  • added nonzeros() for extracting non-zero values from matrices
  • added handling of diagonal views by sparse matrices
  • expanded repmat() to handle sparse matrices
  • expanded join_rows() and join_cols() to handle sparse matrices
  • sort_index() and stable_sort_index() have been placed in the delayed operations framework for increased efficiency
  • use of 64 bit integers is automatically enabled when using a C++11 compiler
  • workaround for a bug in recent releases of Apple Xcode
  • workaround for a bug in LAPACK 3.5

New in Armadillo 4.650.0 (Feb 19, 2015)

  • added randg() for generating random values from gamma distributions (C++11 only)
  • added .head_rows() and .tail_rows() to submatrix views
  • added .head_cols() and .tail_cols() to submatrix views
  • expanded eigs_sym() to optionally calculate eigenvalues with smallest/largest algebraic values
  • fixes for handling of sparse matrices

New in Armadillo 4.600.0 (Dec 29, 2014)

  • added .head() and .tail() to submatrix views
  • faster matrix transposes within compound expressions
  • faster accu() and norm() when compiling with -O3 -ffast-math -march=native (gcc and clang)
  • workaround for a bug in GCC 4.4

New in Armadillo 4.450.0 (Sep 19, 2014)

  • 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

New in Armadillo 4.400.2 (Sep 9, 2014)

  • disabled automatic detection of HDF5 to prevent compilation problems

New in Armadillo 4.400.0 (Aug 19, 2014)

  • added gmm_diag class for statistical modelling using Gaussian Mixture Models;
  • includes multi-threaded implementation of k-means and Expectation-Maximisation for parameter estimation
  • added clamp() for clamping values to be between lower and upper limits
  • expanded batch insertion constructors for sparse matrices to add values at repeated locations
  • faster handling of subvectors by dot()
  • faster handling of aliasing by submatrix views
  • MLPACK 1.0.9 released; MLPACK is a library for machine learning and pattern recognition, built on top of Armadillo
  • Armadillo is used extensively in a self-driving car project at University of Ulm

New in Armadillo 4.320.0 (Jul 2, 2014)

  • 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
  • Scyllarus is a toolbox for processing hyper-spectral data, using Armadillo as the math library

New in Armadillo 4.319 Beta 1 (Jul 1, 2014)

  • 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
  • Scyllarus is a toolbox for processing hyper-spectral data, using Armadillo as the math library

New in Armadillo 4.300.2 (May 15, 2014)

  • fix for detection of HDF5 library during automatic installation
  • faster find()

New in Armadillo 4.300.0 (May 3, 2014)

  • faster find()
  • added find_finite() and find_nonfinite() for finding indices of finite and non-finite elements
  • expressions X=inv(A)*B*C and X=A.i()*B*C are automatically converted to X=solve(A,B*C)
  • cmake-based installer enables use of C++11 random number generator when using gcc 4.9+ in C++11 mode

New in Armadillo 4.249 Alpha 2 (May 1, 2014)

  • faster find()
  • added find_finite() and find_nonfinite() for finding indices of finite and non-finite elements
  • expressions X=inv(A)*B*C and X=A.i()*B*C are automatically converted to X=solve(A,B*C)
  • cmake-based installer enables use of C++11 random number generator when using gcc 4.9+ in C++11 mode

New in Armadillo 4.200.0 (Apr 7, 2014)

  • faster transpose of sparse matrices
  • more efficient handling of aliasing during matrix multiplication
  • faster inverse of matrices marked as diagonal

New in Armadillo 4.149.1 Alpha (Mar 25, 2014)

  • faster transpose of sparse matrices
  • more efficient handling of aliasing during matrix multiplication
  • faster inverse of matrices marked as diagonal
  • Ceemple is a JIT based environment for rapid prototyping and technical computing, using Armadillo as the math library

New in Armadillo 4.100.2 (Mar 7, 2014)

  • fix for handling null vectors by normalise()
  • fix for memory handling by sparse matrices

New in Armadillo 4.100 (Mar 3, 2014)

  • 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

New in Armadillo 4.000.4 (Mar 3, 2014)

  • fix for randi() generating out-of-interval values
  • fix for saving field objects
  • workaround for a bug in the Intel compiler

New in Armadillo 4.000.3 (Feb 6, 2014)

  • fix for saving field objects

New in Armadillo 4.000.1 (Jan 16, 2014)

  • fix for randi() generating out-of-interval values
  • workaround for a bug in the Intel compiler

New in Armadillo 4.000.0 (Jan 6, 2014)

  • 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)

New in Armadillo 3.930.0 (Dec 7, 2013)

  • 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 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

New in Armadillo 3.929 Beta 1 (Dec 5, 2013)

  • added size() based specifications of submatrix view sizes
  • added element-wise variants of min() and max()
  • added divide-and-conquer variant of svd_econ(), for faster SVD
  • added divide-and-conquer variant of pinv(), for faster pseudo-inverse
  • added randi() for generating matrices with random integer values
  • added more intuitive specification of sort direction in sort() and sort_index()
  • added more intuitive specification of method in det(), .i(), inv() and solve()

New in Armadillo 3.920.3 (Nov 29, 2013)

  • fix for handling of tiny matrices by .swap()
  • minor fix for linking with ATLAS

New in Armadillo 3.920.2 (Oct 14, 2013)

  • minor fix for linking with ATLAS

New in Armadillo 3.920.0 (Oct 14, 2013)

  • 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)
  • MLPACK is a machine learning and pattern recognition library, built on top of Armadillo

New in Armadillo 3.910.0 (Aug 15, 2013)

  • 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

New in Armadillo 3.900.7 (Jul 31, 2013)

  • minor fix for inplace reshape()
  • minor corrections for compilation issues under GCC 4.8+ and MSVC

New in Armadillo 3.900.3 (Jun 12, 2013)

  • minor corrections for compilation issues under GCC 4.8+ and MSVC

New in Armadillo 3.900.0 (Jun 4, 2013)

  • added automatic SSE2 vectorization of elementary expressions (eg. matrix addition) when using GCC 4.7+ with -O3 optimization
  • added support for saving & loading of cubes in HDF5 format
  • faster median()
  • faster handling of compound expressions with transposes of submatrix rows
  • faster handling of compound expressions with transposes of complex vectors

New in Armadillo 3.820.1 (May 20, 2013)

  • added detection of OpenBLAS during installation
  • (OpenBLAS is a high performance implementation of BLAS, greatly speeding up matrix multiplication)

New in Armadillo 3.820.0 (May 13, 2013)

  • 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

New in Armadillo 3.810.2 (Apr 27, 2013)

  • minor fix for initialization of sparse matrices
  • minor fix for linking with MKL on Ubuntu systems

New in Armadillo 3.810.0 (Apr 19, 2013)

  • 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

New in Armadillo 3.800.1 (Mar 12, 2013)

  • workaround for a bug in ATLAS 3.8 on 64 bit systems
  • faster matrix-vector multiply for small matrices

New in Armadillo 3.800.0 (Mar 1, 2013)

  • 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

New in Armadillo 3.6.3 (Feb 20, 2013)

  • faster find()
  • minor fix for non-contiguous submatrix views to handle empty vectors of indices
  • reduction of pedantic compiler warnings

New in Armadillo 3.6.2 (Jan 29, 2013)

  • faster determinant for matrices marked as diagonal or triangular
  • more fine-grained handling of 64 bit integers

New in Armadillo 3.6.1 (Dec 17, 2012)

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

New in Armadillo 3.6.0 (Dec 7, 2012)

  • 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

New in Armadillo 3.4.4 (Nov 2, 2012)

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

New in Armadillo 3.4.3 (Oct 3, 2012)

  • 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

New in Armadillo 3.4.2 (Sep 25, 2012)

  • minor fixes for handling sparse submatrix views
  • minor speedups for sparse matrices

New in Armadillo 3.4.1 (Sep 18, 2012)

  • workaround for a bug in the Mac OS X accelerate framework
  • fixes for handling empty sparse matrices
  • added documentation for saving & loading matrices in HDF5 format
  • faster dot() and cdot() for complex numbers

New in Armadillo 3.4.0 (Sep 6, 2012)

  • added economical QR decomposition: qr_econ()
  • added .each_col() & .each_row() for vector operations repeated on each column or row
  • added preliminary support for sparse matrices
  • faster singular value decomposition via divide-and-conquer algorithm
  • faster .randn()

New in Armadillo 3.2.4 (Jul 11, 2012)

  • workaround for a regression (bug) in GCC 4.7.0 and 4.7.1

New in Armadillo 3.2.3 (Jul 2, 2012)

  • minor correction for declaration of fixed size vectors and matrices

New in Armadillo 3.2.2 (Jun 1, 2012)

  • minor fix for compiling without debugging enabled (aka release mode)
  • better detection of ATLAS during installation on Fedora and Red Hat systems

New in Armadillo 3.2.1 (May 28, 2012)

  • minor fix for compiling without debugging enabled (aka release mode)

New in Armadillo 3.1.94 (May 15, 2012)

  • added unique(), for finding unique elements of a matrix
  • faster eigen decomposition via "divide and conquer" algorithm
  • faster transpose of vectors and compound expressions
  • faster handling of tiny fixed size vectors (? 4 elements)

New in Armadillo 3.0.3 (May 3, 2012)

  • fixes for inplace transpose of complex number matrices
  • fixes for complex number version of svd_econ()
  • fixes for potential aliasing issues with submatrix views

New in Armadillo 3.0.2 (Apr 19, 2012)

  • fixes for handling diagonal matrices

New in Armadillo 3.0.1 (Apr 13, 2012)

  • fixes for compilation errors
  • fixes for potential aliasing issues

New in Armadillo 3.0.0 (Apr 10, 2012)

  • added non-contiguous submatrix views
  • added shorthand for inverse: .i()
  • added hist() and histc()
  • faster repmat()
  • faster handling of submatrix views with one row or column
  • faster generation of random numbers
  • faster element access in fixed size matrices
  • better detection of vector expressions by sum(), cumsum(), prod(), min(), max(), mean(), median(), stddev(), var()
  • expressions X=A.i()*B and X=inv(A)*B are automatically converted to X=solve(A,B)

New in Armadillo 2.99.4 (Apr 7, 2012)

  • fixes for handling expressions with fixed size matrices

New in Armadillo 2.99.3 (Apr 2, 2012)

  • faster repmat()
  • workarounds for braindead compilers (eg. Visual Studio)

New in Armadillo 2.99.2 (Mar 29, 2012)

  • added .i()
  • much faster handling of .col() and .row()
  • expressions X=A.i()*B and X=inv(A)*B are automatically converted to X=solve(A,B)

New in Armadillo 2.99.1 (Mar 19, 2012)

  • added non-contiguous submatrix views
  • added hist() and histc()
  • faster handling of submatrix views
  • faster generation of random numbers
  • faster element access in fixed size matrices
  • better detection of vector expressions by sum(), cumsum(), prod(), min(), max(), mean(), median(), stddev(), var()

New in Armadillo 2.4.4 (Mar 6, 2012)

  • fixes for qr() and syl()
  • more portable wall_clock class
  • faster relational operators on submatrices

New in Armadillo 2.4.2 (Dec 12, 2011)

  • clarified documentation for .reshape()
  • fix for handling of empty matrices by .resize()

New in Armadillo 2.4.1 (Dec 12, 2011)

  • added .resize()
  • fix for vector initialisation

New in Armadillo 2.4.0 (Dec 6, 2011)

  • 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

New in Armadillo 2.3.92 (Nov 29, 2011)

  • fixes for linking on Ubuntu and Debian systems
  • fixes for inconsistencies in interactions between matrices and cubes

New in Armadillo 2.3.91 (Nov 29, 2011)

  • 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
  • bugfixes for handling expressions with aliasing and submatrices
  • refactored code to eliminate warnings when using the Clang C++ compiler
  • .print_trans() and .raw_print_trans() are deprecated

New in Armadillo 2.2.3 (Aug 27, 2011)

  • fix for speed issue in as_scalar()

New in Armadillo 2.2.1 (Aug 23, 2011)

  • faster multiplication of small matrices
  • faster trans()
  • faster handling of submatrices by norm()
  • added economical singular value decomposition: svd_thin()
  • added circ_toeplitz()
  • added .is_colvec() & .is_rowvec()
  • fixes for handling of complex numbers by cov(), cor(), running_stat_vec

New in Armadillo 2.0.2 (Aug 23, 2011)

  • fix for handling of conjugate transpose by as_scalar()
  • fix for handling of aliasing by diagmat()
  • Fix for handling of empty matrices by symmatu()/symmatl()

New in Armadillo 2.0.0 (Aug 23, 2011)

  • faster multiplication of tiny matrices (= 4x4)
  • faster compound expressions containing submatrices
  • faster inverse of symmetric positive definite matrices
  • faster element access for fixed size matrices
  • added handling of arbitrarily sized empty matrices (eg. 5x0)
  • added loading & saving of matrices as CSV text files
  • added .count() member function to running_stat and running_stat_vec
  • added syl(), strans(), symmatu()/symmatl()
  • added submatrices of submatrices
  • det(), inv() and solve() can be forced to use more precise algorithms for tiny matrices (= 4x4)
  • htrans() has been deprecated; use trans() instead
  • API change: trans() now takes the complex conjugate when transposing a complex matrix
  • API change: .is_vec() now outputs true for empty vectors (eg. 0x1)
  • API change: forms of chol(), eig_sym(), eig_gen(), inv(), lu(), pinv(), princomp(), qr(), solve(), svd(), syl() that do not return a bool indicating success now throw std::runtime_error exceptions when failures are detected
  • API change: princomp_cov() has been removed; eig_sym() in conjunction with cov() can be used instead
  • API change: set_log_stream() & get_log_stream() have been replaced by set_stream_err1() & get_stream_err1()

New in Armadillo 1.2.0 (Apr 22, 2011)

  • Added ability to use Blas & Lapack libraries with capitalised function names
  • Reduction of pedantic compiler warnings

New in Armadillo 1.1.92 (Mar 31, 2011)

  • Bugfix in cor()
  • Automatic installation now requires CMake >= 2.6

New in Armadillo 1.1.90 (Mar 22, 2011)

  • Added .min() & .max(), which can provide the extremum's location
  • More robust mean(), var(), stddev()

New in Armadillo 1.1.8 (Mar 10, 2011)

  • Added floor() and ceil()
  • Added “not a number”: math::nan()
  • Added infinity: math::inf()
  • Added standalone is_finite()
  • Faster min(), max(), mean()
  • Bugfix for a corner case with NaNs in min() and max()

New in Armadillo 1.1.6 (Mar 2, 2011)

  • fixed size matrices and vectors can use auxiliary (external) memory
  • .in_range() can use span() arguments
  • subfields can use span() arguments

New in Armadillo 1.1.4 (Mar 2, 2011)

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

New in Armadillo 1.1.2 (Feb 2, 2011)

  • Faster prod()
  • Faster solve() for compound expressions
  • Fix for compilation with GCC using the -std=c++0x mode
  • Fix for matrix handling by subcubes

New in Armadillo 1.1.0 (Dec 26, 2010)

  • Extended submatrix views, including access to elements whose indices are specified in a separate vector
  • Added handling of raw binary files by save/load functions
  • Added cumsum()
  • Added interpretation of matrices as triangular via trimatu()/trimatl()
  • Faster solve() and inv() via explicit handling of triangular matrices
  • The stream for logging of errors and warnings can now be changed

New in Armadillo 1.0.0 (Dec 26, 2010)

  • 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

New in Armadillo 0.9.92 (Nov 11, 2010)

  • Fixes for compilation issues under the Intel C++ compiler
  • Added matrix norms

New in Armadillo 0.9.90 (Oct 17, 2010)

  • Added unsafe_col()
  • Speedups and bugfixes in lu()
  • Minimisation of pedantic compiler warnings

New in Armadillo 0.9.80 (Sep 21, 2010)

  • Added join_slices(), insert_slices(), shed_slices()
  • Added in-place operations on diagonals
  • Various speedups due to internal architecture improvements

New in Armadillo 0.9.70 (Sep 1, 2010)

  • Added template based size specification
  • Added insertion of rows & columns
  • Added deletion of rows & columns
  • Added set_imag() & set_real()
  • Added in_range()
  • Added is_empty()
  • Various speedups, mainly in expressions involving submatrices
  • Fixes for a few corner cases

New in Armadillo 0.9.60 (Aug 5, 2010)

  • More flexible reshape(), allowing significantly different matrix sizes
  • Added matrix initialisation via the

New in Armadillo 0.9.52 (Jul 18, 2010)

  • Bugfixes for saving complex cubes
  • Workarounds to remove warnings under certain dodgy compilers

New in Armadillo 0.9.50 (Jul 18, 2010)

  • Faster compilation by omitting Boost where possible
  • Faster insertion into submatrices
  • More accurate linspace()
  • Deprecated rand() in favour of randu()
  • Modified load() & save() to print warnings
  • Added quiet_load() & quiet_save()
  • Added conversions to/from std::vector
  • Added convolution operation: conv()
  • Added toeplitz()
  • Added detection of MKL & ACML during installation
  • Added MSVC project files for compiling examples

New in Armadillo 0.9.10 (Jun 3, 2010)

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

New in Armadillo 0.9.8 (May 14, 2010)

  • Added handling of interactions between complex scalars and non-complex matrices
  • Minor bugfixes for compilation issues under certain compilers

New in Armadillo 0.9.6 (Apr 28, 2010)

  • Faster randn()
  • Expanded norm() to handle max and min norms
  • Added join_rows()/join_cols(), find() and STL-style iterators

New in Armadillo 0.7.0 (Oct 15, 2009)

  • Main changes: 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()

New in Armadillo 0.6.12 (Jun 25, 2009)

  • Main changes:
  • Added raw_print() and a collection of physical constants
  • Code cleanup for better conformance to the C++ standard
  • Miscellaneous documentation and installation improvements

New in Armadillo 0.6.11 (Jun 25, 2009)

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

New in Armadillo 0.6.10 (Jun 25, 2009)

  • Main changes: Added eigen decomposition of generic (non-symmetric) matrices
  • Function eig() renamed to eig_sym()

New in Armadillo 0.6.8 (Jun 25, 2009)

  • Main changes: Better installation on MacOS X
  • Colour PPM images can now be loaded as fields of matrices

New in Armadillo 0.6.6 (Jun 25, 2009)

  • Main changes: 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

New in Armadillo 0.6.2 (Jun 25, 2009)

  • Fixes for interactions between matrices with different element types

New in Armadillo 0.6.0 (Jun 25, 2009)

  • 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

New in Armadillo 0.5.2 (Jun 25, 2009)

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

New in Armadillo 0.5.0 (Jun 25, 2009)

  • 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

New in Armadillo 0.4.0 (Jun 25, 2009)

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

New in Armadillo 0.3.0 (Jun 25, 2009)

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