Ich suche eine gute (im besten Fall aktiv gepflegte) C ++ - Matrixbibliothek. Dabei sollte es templated sein, weil ich einen Rationalkomplex als numerischen Typ verwenden möchte. Die Matrizen, mit denen ich mich beschäftige, sind hauptsächlich spärlich und einheitlich.
Kannst du bitte Bibliotheken vorschlagen und auch eine kleine Erklärung geben, warum ich sie benutzen soll, weil ich weiß, wie man sie findet, aber ich kann nicht wirklich entscheiden, was für mich geeignet ist, weil ich die Erfahrung damit vermisse.
BEARBEITEN:
Die Hauptoperationen, mit denen ich mich beschäftige, sind Matrixmultiplikation , Skalarmultiplikation mit einem Vektor und kronecker Produkt . Die Größe der Matrizen ist exponentiell und ich möchte zumindest mit Matrizen bis zu 1024x1024 Einträgen umgehen können.
Viele Leute, die "ernsthafte" Matrix-Sachen machen, verlassen sich auf BLAS und fügen LAPACK / ATLAS (normale Matrizen) oder (dünn besetzte Matrizen) für mehr Mathematik. Der Grund ist, dass dieser Code gut getestet, stabil, zuverlässig und ziemlich schnell ist. Darüber hinaus können Sie sie direkt von einem Hersteller kaufen (zB Intel MKL ), der auf Ihre Architektur abgestimmt ist, aber Holen Sie sie auch kostenlos. uBLAS in Manuel's Antwort ist wahrscheinlich die Standard-C ++ - BLAS-Implementierung. Und wenn Sie später etwas wie LAPACK brauchen, gibt es dafür Bindungen .
Keine dieser Standardbibliotheken (BLAS / LAPACK / ATLAS oder uBLAS + Bindungen + LAPACK / ATLAS) ist jedoch in der Lage, Vorlagen zu erstellen und einfach zu verwenden (es sei denn, uBLAS ist alles, was Sie jemals brauchen werden). Eigentlich muss ich zugeben, dass ich die C / Fortran-Schnittstelle normalerweise direkt anrufe, wenn ich eine BLAS / LAPACK-Implementierung verwende, da ich oft nicht viel zusätzlichen Vorteil in der uBLAS + -Bindungskombination sehe.
Wenn ich eine einfach zu verwendende universelle C ++ - Matrixbibliothek benötige, neige ich dazu, Eigen zu verwenden (Früher habe ich NewMat verwendet). Vorteile:
Nachteile (IMO):
Edit: Das bevorstehende Eigen 3.1 erlaubt einigen Funktionen, die Intel MKL (oder jede andere BLAS / LAPACK-Implementierung) zu verwenden.
Tags und Links c++ sparse-matrix matrix lapack umfpack