Ich bin gewohnt für fast alle meine mathematische lineare Algebra arbeiten. Vor kurzem habe ich entdeckt, dass Boost auch eine C++ Template-Klassenbibliothek bereitstellt, die Basic Linear Algebra Library (Boost::uBLAS) bereitstellt. Das hat mich neugierig gemacht, ob ich meine ganze Arbeit nur auf Basis von Boost bekommen kann, da es bereits eine Hauptbibliothek für meinen Code ist.Boost :: uBLAS vs Eigen
Ein genauerer Blick auf beide habe hat mich nicht wirklich eine deutlichere Unterscheidung zwischen ihnen:
- boost :: uBLAS:
uBLAS bietet Templat-C++ Klassen für dichte, Einheit und spärliche Vektoren, dicht, Identität, dreieckig, gebändert, symmetrisch, hermitesche und spärliche Matrizen. Ansichten in Vektoren und Matrizen können über Bereiche, Slices, Adapterklassen und indirekte Arrays erstellt werden. Die Bibliothek deckt die üblichen grundlegenden Operationen der linearen Algebra auf Vektoren und Matrizen ab: Reduktionen wie verschiedene Normen, Addition und Subtraktion von Vektoren und Matrizen und Multiplikation mit einem Skalar, innere und äußere Produkte von Vektoren, Matrixvektor und Matrixmatrixprodukte und Dreieckslöser.
...
- Eigen:
Es unterstützt alle Matrixgrößen von kleinen fester Größe Matrizen beliebig große, dichte Matrizen und sogar schwach besetzte Matrizen.
Es unterstützt alle numerischen Standardtypen, einschließlich std :: complex, Ganzzahlen, und kann problemlos auf benutzerdefinierte numerische Typen erweitert werden.
Es unterstützt verschiedene Matrixzerlegungs- und Geometriefunktionen.
Das Ökosystem der nicht unterstützten Module bietet viele spezielle Funktionen wie nichtlineare Optimierung, Matrixfunktionen, einen Polynomlöser, FFT und vieles mehr.
...
Hat jemand eine bessere Vorstellung über ihre wichtigsten Unterschiede und auf welcher Grundlage können wir zwischen ihnen wählen?
Eigen verwendet auch Expressionsvorlagen. –
@quant_dev Ich habe es deutlicher gemacht. – kangshiyin
Beachten Sie, dass diese Benchmarks ziemlich alt sind (ab 2011) und nicht unabhängig sind. –