2017-03-01 1 views
3

Ma question: Est-il possible de créer un vecteur de tenseurs Eigen avec différents rangs?Vecteur de tenseurs Eigen avec différents rangs

Mon but est de pouvoir créer un vecteur contenant des objets dont les types prennent des valeurs parmi Eigen::MatrixXd, Tensor3d, Tensor4d,..., Tensor10d (défini ci-dessous). Les objets peuvent avoir différents types.

Merci d'avance pour votre aide!

#include <iostream> 
#include <vector> 
#include <Eigen/Dense> 
#include <unsupported/Eigen/CXX11/Tensor> 

typedef Eigen::Tensor< double , 3 > Tensor3d; 
typedef Eigen::Tensor< double , 4 > Tensor4d; 
typedef Eigen::Tensor< double , 5 > Tensor5d; 
typedef Eigen::Tensor< double , 6 > Tensor6d; 
typedef Eigen::Tensor< double , 7 > Tensor7d; 
typedef Eigen::Tensor< double , 8 > Tensor8d; 
typedef Eigen::Tensor< double , 9 > Tensor9d; 
typedef Eigen::Tensor< double , 10 > Tensor10d; 

class MyClass 
{ 
private: 
    std::vector<TensorXd> Tensors; 
public: 
    MyClass(); 
}; 
+0

Peut-être que: http://stackoverflow.com/questions/13461869/c-push-multiple-types-onto-vector, mais c'est un peu moche. – Aziuth

+0

@Aziuth Merci, je vais essayer mais je cherche toujours une solution plus élégante et plus transparente. – Khue

Répondre

2

Depuis que vous avez taguée cette question [tensorflow], je suppose que vous utilisez Eigen::Tensor dans le cadre d'un programme de tensorflow. Le answer auquel Aziuth pointed in their comment suggère d'utiliser une classe wrapper pour contenir les tenseurs, et heureusement TensorFlow est livré avec sa propre classe wrapper: tensorflow::Tensor.

Vous pouvez créer un std::vector<tensorflow::Tensor>, utilisez allocateur de tensorflow allouer de la mémoire pour les différents tenseurs, et accéder aux objets emballés Eigen::Tensor en utilisant la méthode tensorflow::Tensor::tensor().

+0

Merci beaucoup, @mrry. Malheureusement, je n'utilise pas Eigen :: Tensor dans TensorFlow mais en C++ pur. J'ai tagué 'tensorflow' parce que je pensais que les gens de Tensorflow sont aussi très familiers avec Eigen :: Tensor. Désolé si cela a créé une confusion (mais je pense que votre réponse sera très utile pour les utilisateurs de Tensorflow, aussi!). – Khue

+0

Hélas! Vous aurez probablement besoin de mettre en œuvre quelque chose de similaire ... peut-être le code [ici] (https://github.com/tensorflow/tensorflow/blob/a230417c58c258b2417225c739a1e5f0890491e6/tensorflow/core/framework/tensor.h) serait facile à couper vers le bas pour vos objectifs .... – mrry

+0

Merci, @mrry! Ce code Tensorflow est très utile. Laissez-moi passer du temps à trouver comment l'utiliser. – Khue