2010-08-09 6 views
4

Qu'est-ce qu'une structure de données appropriée pour représenter un tesnor clairsemé en C++? La première option qui vient à l'esprit est un boost::unordered_map car il permet des opérations telles que la configuration rapide et la récupération d'un élément comme ci-dessous:Structure de données pour représenter le tenseur clairsemé?

A(i,j,k,l) = 5 

Cependant, je voudrais aussi pouvoir faire des contractions sur un seul indice , ce qui impliquerait la sommation sur l'un des indices

C(i,j,k,m) = A(i,j,k,l)*B(l,m) 

Comment serait-il facile à mettre en œuvre cet opérateur avec un boost::unordered_map? Y a-t-il une structure de données plus appropriée?

+1

Est-ce qu'il y en a peu dans chaque dimension? vous pouvez implémenter wrapper autour de array ou map d'un ublas :: sparse_matrix. – Anycorn

Répondre

0

Il existe des bibliothèques tenseurs disponibles, comme:

http://www.codeproject.com/KB/recipes/tensor.aspx 

et

http://cadadr.org/fm/package/ftensor.html 

Toute question avec ceux? Vous obtiendriez plus d'opérations tensorielles en utilisant une carte.

+0

Les bibliothèques que vous mentionnez utilisent toutes des tenseurs denses, et j'ai besoin d'utiliser des tenseurs clairsemés car les dimensions de mes tenseurs sont trop grandes pour être représentées efficacement comme un tenseur dense. – dzhelil

Questions connexes