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}} | 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}} | 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
| 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}} | 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}} | 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
| 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.
| 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}} | 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
- SVD – singular value decomposition
- GEVP – generalized EVP
- GSVD – generalized 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}}
External links
- {{GitHub|scipy|scipy}}
- {{GitHub|conradsnicta/armadillo|armadillo}}
- {{GitHub|mathnet/mathnet-numerics|mathnet-numerics}}
{{Linear algebra}}
*Comparison of linear algebra libraries