Je recherche une bibliothèque de tenseurs C ++ qui prend en charge le code indépendant de la dimension. Plus précisément, je dois effectuer des opérations le long de chaque dimension (jusqu'à 3), par exemple calculer une somme pondérée. Les dimensions sont un paramètre de modèle (et donc une constante de temps de compilation). Une autre contrainte est que la bibliothèque doit être relativement légère, donc plutôt de style Eigen / Boost que Trilinos / PETSc.
Aucune suggestion?
Remarque: j'ai jeté un œil à Eigen et je pense qu'il correspond presque exactement au profil, s'il n'était pas limité aux tenseurs 2D. Si je me trompe, corrigez-moi.
Je pense que cette nouvelle
taco
bibliothèque est vraiment bien aussi.Le compilateur d'algèbre tenseur (taco) est une bibliothèque C ++ qui calcule les expressions d'algèbre tensorielle sur des tenseurs clairsemés et denses. Il utilise de nouvelles techniques de compilation pour obtenir des performances compétitives avec des noyaux optimisés à la main dans des bibliothèques largement utilisées pour l'algèbre tensorielle clairsemée et l'algèbre linéaire clairsemée.
Vous pouvez utiliser taco comme une bibliothèque C ++ qui vous permet de charger des tenseurs, de lire des tenseurs à partir de fichiers et de calculer des expressions de tenseurs. Vous pouvez également utiliser taco comme générateur de code qui génère des fonctions C qui calculent des expressions tensorielles.
Discuter: https://www.youtube.com/watch?v=Kffbzf9etLE Papier: http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf
la source
XTensor est une approche moderne et devient de plus en plus populaire. https://github.com/QuantStack/xtensor
la source
La bibliothèque deal.II ( http://www.dealii.org ), bien qu'écrite à des fins beaucoup plus importantes, possède également une sous-bibliothèque de classes de tenseurs qui fait probablement beaucoup de ce que vous voulez faire. En particulier, il utilise des modèles pour la dimension.
(Avertissement: je suis l'un des principaux auteurs de cette bibliothèque.)
la source
La bibliothèque Boost.Numeric.uBlas a récemment ajouté une extension de tensor qui est livrée avec Boost version 1.70. Veuillez consulter https://github.com/boostorg/ublas . Il fournit des opérations matricielles et tensorielles standard avec un ordre variable à l'exécution (nombre de dimensions), des dimensions pour les formats de stockage de premier et dernier ordre (colonnes et lignes principales). Vous pouvez également facilement utiliser la convention de sommation d'Einstein pour exprimer des multiplications de tenseurs aribtraires. Boost.Numeric.uBlas est uniquement en-tête et facile à intégrer dans les projets existants.
la source
Je ne l'ai pas utilisé moi-même mais libtensor semble répondre à vos exigences.
la source
il s'agit d'une bibliothèque C ++ de tableau multidimensionnel https://github.com/ContinuumIO/libdynd
la source
LTensor ( https://code.google.com/p/ltensor/ ) est une bibliothèque de modèles C ++ TRÈS facile à utiliser pour les tenseurs jusqu'au rang 4 (basé sur la notation indicale), rapide et légère également. Vous n'avez pas besoin de compiler quoi que ce soit, il suffit d'inclure le fichier d'en-tête principal. Je l'ai utilisé sur plusieurs projets et j'ai bien fonctionné.
Il a des fonctionnalités intégrées pour les tenseurs de rang 2 comme les solveurs linéaires, les décompositions svd, LU et Cholesky, etc. Je n'en ai utilisé aucune (j'utilise d'autres bibliothèques pour cela).
la source
Il existe également ITensor (nécessite C ++ 17).
la source