comparison of linear algebra libraries

The following tables provide a comparison of linear algebra software libraries, either specialized or general purpose libraries with significant linear algebra coverage.

Dense linear algebra

= General information =

class="wikitable sortable" style="font-size: smaller; text-align: center; width: auto;"
style="width: 12em"|

! Creator

! Language

! First public release

! Latest stable version

! Source code availability

! License

! Notes

ALGLIBBochkanov, S., & Bystritsky, V. (2011). ALGLIB-a cross-platform numerical analysis and data processing library. ALGLIB Project.

| ALGLIB Project

| C++, C#, Python, FreePascal

| 2006

| 4.00.0 / 05.2023

| {{free}}

| GPL/commercial

| General purpose numerical analysis library with C++, C#, Python, FreePascal interfaces.

ArmadilloSanderson, C., & Curtin, R. (2016). Armadillo: a template-based C++ library for linear algebra. Journal of Open Source Software, 1(2), 26.Sanderson, C. (2010). Armadillo: An open source C++ linear algebra library for fast prototyping and computationally intensive experiments (p. 84). Technical report, NICTA.

| NICTA

| C++

| 2009

| 12.6.6 / 10.2023

| {{free}}

| Apache License 2.0

| C++ template library for linear algebra; includes various decompositions and factorisations; syntax (API) is similar to MATLAB.

ATLAS

| R. Clint Whaley et al.

| C

| 2001

| 3.10.3 / 07.2016

| {{free}}

| BSD

| Automatically tuned implementation of BLAS. Also includes LU and Cholesky decompositions.

Blaze{{Cite web|url=https://bitbucket.org/blaze-lib/blaze/src/master/|title = Bitbucket}}

| K. Iglberger et al.

| C++

| 2012

| 3.8 / 08.2020

| {{free}}

| BSD

| Blaze is an open-source, high-performance C++ math library for dense and sparse arithmetic.

Blitz++

| Todd Veldhuizen

| C++

| ?

| 1.0.2 / 10.2019

| {{free}}

| GPL

| Blitz++ is a C++ template class library that provides high-performance multidimensional array containers for scientific computing.

Boost uBLAS

| J. Walter, M. Koch

| C++

| 2000

| 1.84.0 / 12.2023

| {{free}}

| Boost Software License

| uBLAS is a C++ template class library that provides BLAS level 1, 2, 3 functionality for dense, packed and sparse matrices.

Dlib

| Davis E. King

| C++

| 2006

| 19.24.2 / 05.2023

| {{Free}}

| Boost

| C++ template library; binds to optimized BLAS such as the Intel MKL; Includes matrix decompositions, non-linear solvers, and machine learning tooling

Eigen

| Benoît Jacob

| C++

| 2008

| 3.4.0 / 08.2021

| {{free}}

| MPL2

| Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

Fastor{{cite journal|doi=10.1016/j.cpc.2017.02.016 | title=A high performance data parallel tensor contraction framework: Application to coupled electro-mechanics | author=Poya, Roman and Gil, Antonio J. and Ortigosa, Rogelio | year=2017 | journal = Computer Physics Communications | volume=216 | pages=35–52 | bibcode=2017CoPhC.216...35P | url=https://cronfa.swan.ac.uk/Record/cronfa32097 }}

| R. Poya, A. J. Gil and R. Ortigosa

| C++

| 2016

| 0.6.4 / 06.2023

| {{free}}

| MIT License

| Fastor is a high performance tensor (fixed multi-dimensional array) library for modern C++.

GNU Scientific LibraryGough, B. (2009). GNU scientific library reference manual. Network Theory Ltd.

| GNU Project

| C, C++

| 1996

| 2.7.1 / 11.2021

| {{free}}

| GPL

| General purpose numerical analysis library. Includes some support for linear algebra.

IMSL Numerical Libraries

| Rogue Wave Software

| C, Java, C#, Fortran, Python

| 1970

| many components

| {{nonfree}}

| Proprietary

| General purpose numerical analysis library.

LAPACKAnderson, E., Bai, Z., Bischof, C., Blackford, S., Dongarra, J., Du Croz, J., ... & Sorensen, D. (1999). LAPACK Users' guide. SIAM.Anderson, E., Bai, Z., Dongarra, J., Greenbaum, A., McKenney, A., Du Croz, J., ... & Sorensen, D. (1990, November). LAPACK: A portable linear algebra library for high-performance computers. In Proceedings of the 1990 ACM/IEEE conference on Supercomputing (pp. 2–11). IEEE Computer Society Press.

|

| Fortran

| 1992

| 3.12.0 / 11.2023

| {{free}}

| 3-clause BSD

| Numerical linear algebra library with long history

librsb

| Michele Martone

| C, Fortran, M4

| 2011

| 1.2.0 / 09.2016

| {{free}}

| GPL

| High-performance multi-threaded primitives for large sparse matrices. Support operations for iterative solvers: multiplication, triangular solve, scaling, matrix I/O, matrix rendering. Many variants: e.g.: symmetric, hermitian, complex, quadruple precision.

oneMKL

| Intel

| C, C++, Fortran

| 2003

| 2023.1 / 03.2023

| {{nonfree}}

| Intel Simplified Software License

| Numerical analysis library optimized for Intel CPUs and GPUs. C++ SYCL based reference API implementation available in source for free.

Math.NET Numerics

| C. Rüegg, M. Cuda, et al.

| C#

| 2009

| 5.0.0 / 04.2022

| {{free}}

| MIT License

| C# numerical analysis library with linear algebra support

Matrix Template Library

| Jeremy Siek, Peter Gottschling, Andrew Lumsdaine, et al.

| C++

| 1998

| 4.0 / 2018

| {{free}}

| Boost Software License

| High-performance C++ linear algebra library based on Generic programming

NAG Numerical Library

| The Numerical Algorithms Group

| C, Fortran

| 1971

| many components

| {{nonfree}}

| Proprietary

| General purpose numerical analysis library.

NMath

| CenterSpace Software

| C#

| 2003

| 7.1 / 12.2019

| {{nonfree}}

| Proprietary

| Math and statistical libraries for the .NET Framework

SciPyJones, E., Oliphant, T., & Peterson, P. (2001). SciPy: Open source scientific tools for Python.Bressert, E. (2012). SciPy and NumPy: an overview for developers. " O'Reilly Media, Inc.".Blanco-Silva, F. J. (2013). Learning SciPy for numerical and scientific computing. Packt Publishing Ltd.

| Enthought

| Python

| 2001

| 1.11.1 / 6.2023

| {{free}}

| BSD

| Based on Python

Xtensor{{Cite web|url=https://github.com/xtensor-stack/xtensor|title = Xtensor-stack/Xtensor|website = GitHub|date = 13 February 2022}}

| S. Corlay, W. Vollprecht, J. Mabille et al.

| C++

| 2016

| 0.21.10 / 11.2020

| {{free}}

| 3-clause BSD

| Xtensor is a C++ library meant for numerical analysis with multi-dimensional array expressions, broadcasting and lazy computing.

= Matrix types and operations =

Matrix types (special types like bidiagonal/tridiagonal are not listed):

  • Real – general (nonsymmetric) real
  • Complex – general (nonsymmetric) complex
  • SPD – symmetric positive definite (real)
  • HPD – Hermitian positive definite (complex)
  • SY – symmetric (real)
  • HE – Hermitian (complex)
  • BND – band

Operations:

  • TF – triangular factorizations (LU, Cholesky)
  • OF – orthogonal factorizations (QR, QL, generalized factorizations)
  • EVP – eigenvalue problems
  • SVDsingular value decomposition
  • GEVP – generalized EVP
  • GSVDgeneralized SVD

class="wikitable sortable" style="text-align: center; width: auto;"
style="width: 12em" |

! Real

! Complex

! SPD

! HPD

! SY

! HE

! BND

! TF

! OF

! EVP

! SVD

! GEVP

! GSVD

ALGLIB

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

ATLAS

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{no}}

| {{no}}

Dlib

| {{Yes}}

| {{Yes}}

| {{Yes}}

| {{Yes}}

| {{Yes}}

| {{Yes}}

| {{No}}

| {{Yes}}

| {{Yes}}

| {{Yes}}

| {{Yes}}

| {{No}}

| {{No}}

GNU Scientific Library

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

ILNumerics.Net

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

IMSL Numerical Libraries

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

| {{yes}}

| {{yes}}

| {{no}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

LAPACK

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

oneMKL

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

NAG Numerical Library

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

NMath

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

SciPy (Python packages)

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{no}}

Eigen

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

Armadillo

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{yes}}

| {{no}}

References

{{Reflist}}