Beste C ++ - Matrixbibliothek für spärliche unitäre Matrizen

8

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.

    
Rupert Jones 08.02.2010, 15:20
quelle

3 Antworten

10

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:

  • ziemlich schnell auf Intel-Architektur, wahrscheinlich die schnellste für kleinere Matrizen
  • nette Schnittstelle
  • fast alles, was Sie von einer Matrixbibliothek erwarten
  • Sie können einfach neue Typen hinzufügen

Nachteile (IMO):

  • Single-Prozessor [ Bearbeiten: teilweise behoben in Eigen 3.0 ]
  • langsamer für größere Matrizen und etwas fortgeschrittenere Mathematik als ATLAS oder Intel MKL (z. B. LU-Zerlegung) [ Bearbeiten: auch in Eigen 3.0]
  • verbessert
  • nur experimentelle Unterstützung für dünn besetzte Matrizen [ Bearbeiten: verbessert in der kommenden Version 3.1].

Edit: Das bevorstehende Eigen 3.1 erlaubt einigen Funktionen, die Intel MKL (oder jede andere BLAS / LAPACK-Implementierung) zu verwenden.

    
stephan 08.02.2010, 16:15
quelle
4

BoBLuLAS , weil es den Boost-Filter bestanden hat .

Es gibt ein paar Template-Bibliotheken, die dünn besetzte Matrizen unterstützen. Es ist daher sehr schwierig, eine bessere Begründung zu finden, wenn Sie nicht genauer auf Ihre Bedürfnisse eingehen.

    
Manuel 08.02.2010 15:26
quelle
1

Sie sollten auch MLT und HASEM Matrix C ++ - Bibliothek. Der letzte ist sehr gut dokumentiert.

    
nidam 14.02.2012 15:58
quelle