Ich suche eine C ++ - Tensorbibliothek, die dimensionsunabhängigen Code unterstützt. Insbesondere muss ich Operationen entlang jeder Dimension ausführen (bis zu 3), z. B. eine gewichtete Summe berechnen. Die Dimension ist ein Vorlagenparameter (und damit eine Konstante für die Kompilierungszeit). Eine weitere Einschränkung ist, dass die Bibliothek relativ leicht sein sollte, also eher Eigen / Boost-Stil als Trilinos / PETSc.
Irgendwelche Vorschläge?
Hinweis: Ich habe mir Eigen angesehen und denke, es passt fast genau zum Profil, wenn es nicht auf 2D-Tensoren beschränkt wäre. Wenn ich mich irre, korrigieren Sie mich bitte.
Ich denke, diese neue
taco
Bibliothek ist auch wirklich gut.Der Tensor Algebra Compiler (Taco) ist eine C ++ - Bibliothek, die Tensor-Algebra-Ausdrücke für spärliche und dichte Tensoren berechnet. Es verwendet neuartige Compilertechniken, um die Leistung von handoptimierten Kerneln in weit verbreiteten Bibliotheken sowohl für die spärliche Tensoralgebra als auch für die spärliche lineare Algebra zu verbessern.
Sie können taco als C ++ - Bibliothek verwenden, mit der Sie Tensoren laden, Tensoren aus Dateien lesen und Tensorausdrücke berechnen können. Sie können Taco auch als Codegenerator verwenden, der C-Funktionen generiert, die Tensorausdrücke berechnen.
Diskussion: https://www.youtube.com/watch?v=Kffbzf9etLE Artikel: http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf
quelle
XTensor ist ein moderner Ansatz und wird immer beliebter. https://github.com/QuantStack/xtensor
quelle
Die deal.II-Bibliothek ( http://www.dealii.org ) ist zwar für viel größere Zwecke geschrieben, verfügt jedoch auch über eine Unterbibliothek von Tensorklassen, die wahrscheinlich viel von dem tun, was Sie tun möchten. Insbesondere werden Vorlagen für die Dimension verwendet.
(Haftungsausschluss: Ich bin einer der Hauptautoren dieser Bibliothek.)
quelle
Die Bibliothek Boost.Numeric.uBlas hat kürzlich eine Tensor-Erweiterung hinzugefügt, die mit der Boost-Version 1.70 ausgeliefert wird. Bitte werfen Sie einen Blick auf https://github.com/boostorg/ublas . Es bietet Standardmatrix- und Tensoroperationen mit laufzeitvariabler Reihenfolge (Anzahl der Dimensionen) und Dimensionen für die Speicherformate erster und letzter Ordnung (Spalten- und Zeilensprung). Sie können die Einstein-Summationskonvention auch leicht verwenden, um aribträre Tensormultiplikationen auszudrücken. Boost.Numeric.uBlas ist nur Header und einfach in bestehende Projekte zu integrieren.
quelle
Ich habe es nicht selbst benutzt, aber libtensor scheint Ihre Anforderungen zu erfüllen.
quelle
Dies ist eine mehrdimensionale Array-C ++ - Bibliothek https://github.com/ContinuumIO/libdynd
quelle
LTensor ( https://code.google.com/p/ltensor/ ) ist eine SEHR einfach zu verwendende C ++ - Vorlagenbibliothek für Tensoren bis Rang 4 (basierend auf der indischen Notation), schnell und leicht. Sie müssen nichts kompilieren, nur die Haupt-Header-Datei einschließen. Ich habe es bei mehreren Projekten verwendet und es hat funktioniert.
Es hat einige eingebaute Funktionen für Tensoren des Rangs 2, wie lineare Löser, svd, LU und Cholesky-Zerlegungen usw. Ich habe keine von ihnen verwendet (ich benutze dafür andere Bibliotheken).
quelle
Es gibt auch ITensor (benötigt C ++ 17).
quelle