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
[edit]General information
[edit]Creator | Language | First public release | Latest stable version | Source code availability | License | Notes | |
---|---|---|---|---|---|---|---|
ALGLIB[1] | 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. |
Armadillo[2][3] | 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[4] | 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[5] | 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 Library[6] | 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 | Non-free | Proprietary | General purpose numerical analysis library. |
LAPACK[7][8] | 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 | Non-free | 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 | Non-free | Proprietary | General purpose numerical analysis library. |
NMath | CenterSpace Software | C# | 2003 | 7.1 / 12.2019 | Non-free | Proprietary | Math and statistical libraries for the .NET Framework |
SciPy[9][10][11] | Enthought | Python | 2001 | 1.11.1 / 6.2023 | Free | BSD | Based on Python |
Xtensor[12] | 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
[edit]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
- SVD – singular value decomposition
- GEVP – generalized EVP
- GSVD – generalized SVD
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
[edit]- ^ Bochkanov, S., & Bystritsky, V. (2011). ALGLIB-a cross-platform numerical analysis and data processing library. ALGLIB Project.
- ^ Sanderson, 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.
- ^ "Bitbucket".
- ^ Poya, Roman and Gil, Antonio J. and Ortigosa, Rogelio (2017). "A high performance data parallel tensor contraction framework: Application to coupled electro-mechanics". Computer Physics Communications. 216: 35–52. Bibcode:2017CoPhC.216...35P. doi:10.1016/j.cpc.2017.02.016.
{{cite journal}}
: CS1 maint: multiple names: authors list (link) - ^ Gough, B. (2009). GNU scientific library reference manual. Network Theory Ltd.
- ^ Anderson, 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.
- ^ Jones, 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.
- ^ "Xtensor-stack/Xtensor". GitHub. 13 February 2022.