Frage

Ich bin auf der Suche nach einer guten (im besten Fall aktiv gepflegt) C ++ Matrix-Bibliothek. Dabei soll es als Templat wurde, weil ich einen Komplex von rationals als Zahlentyp verwendet werden soll. Die Matrizen, was ich zu tun habe mit hauptsächlich spärlich und einheitlich.

Können Sie mir bitte Bibliotheken vorschlagen und auch eine kleine explaination geben, warum sie zu benutzen, weil ich weiß, wie sie zu finden, aber ich kann nicht wirklich entscheiden, was für mich geeignet ist, weil ich die Erfahrung mit ihnen bin fehlt.

EDIT:

Die wichtigsten Operationen, die ich zu tun habe mit sind Matrix-Multiplikation skalare Multiplikation mit einem Vektor und Kronecker-Produkt . Die Größe der Matrizen ist exponentiell, und ich möchte zumindest der Lage sein, mit Matrizen bis zu 1024x1024 Einträge zu behandeln.

War es hilfreich?

Lösung

Viele Menschen "ernst" Matrix Sachen zu tun, die sich auf BLAS , das Hinzufügen LAPACK / UMFPACK (sparse Matrizen) für fortgeschrittene Mathematik. Der Grund dafür ist, dass dieser Code ist gut getestet, stabil, zuverlässig und sehr schnell. Darüber hinaus können Sie diese direkt von einem Anbieter (zB Intel MKL ) kaufen abgestimmt auf Ihre Architektur, sondern auch sie kostenlos. uBLAS erwähnt in Manuel Antwort ist wahrscheinlich die Standard-C ++ BLAS Implementierung. Und wenn Sie so etwas wie LAPACK müssen später, gibt es Bindungen so zu tun.

Doch keine dieser Standardbibliotheken (BLAS / LAPACK / ATLAS oder uBLAS + Bindung + LAPACK / ATLAS) tickt Ihr Feld für wobei als Templat und einfach zu bedienen (es sei denn, uBLAS ist alles, was Sie jemals brauchen werden). Eigentlich muß ich zugeben, dass ich dazu neigen, die C / Fortran-Schnittstelle direkt zu rufen, wenn ich eine BLAS / LAPACK Implementierung verwenden, da ich oft nicht sehen, viel zusätzlichen Vorteil in der uBLAS + Bindungen Kombination.

Wenn ich eine Notwendigkeit, eine einfach zu bedienende, universelle C ++ Matrix-Bibliothek, neige ich dazu verwenden, Eigen (I verwendet verwenden NewMat in der Vergangenheit) . Vorteile:

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

Nachteile (IMO):

  • Ein-Prozessor [ Edit: teilweise fixiert Eigen 3.0 ]
  • langsamer für größere Matrizen und einige fortgeschrittene Mathematik als ATLAS oder Intel MKL (z LU Zersetzung) [ Edit: auch in Eigen verbessert 3.0]
  • nur experimentelle Unterstützung für Sparse-Matrizen [ Edit: in der kommenden Version verbessert 3.1].

Edit: Die kommende Eigen 3.1 einige Funktionen ermöglicht die Intel MKL (oder jede andere BLAS / LAPACK Implementierung) zu verwenden,

.

Andere Tipps

Erhöhung uBLAS weil es den Boost-Filter geleitet wird.

Es gibt ein paar Vorlage Libs, die dünn besetzte Matrizen unterstützen, also ist es wirklich schwer, mit einem besseren Gründe zu kommen, wenn Sie über Ihre Bedürfnisse nicht präziser sind.

Sie sollten auch versuchen, MLT und Hasem Matrix C ++ Bibliothek. Die letzte ist sehr gut dokumentiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top