2017-03-01 4 views
3

私の質問:ランクの異なる固有テンソルのベクトルを作成することは可能ですか?ランクの異なる固有ベクトルのベクトル

私の目標は、タイプがEigen::MatrixXd, Tensor3d, Tensor4d,..., Tensor10d(以下に定義)の値を取るオブジェクトを含むベクトルを作成できるようにすることです。オブジェクトは異なるタイプを持つことができます。

ご協力いただきありがとうございます。

#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

多分:http://stackoverflow.com/questions/13461869/c-push-multiple-types-onto-vector、これはやや醜いです。 – Aziuth

+0

@Aziuthありがとう、私はそれを試しても、よりエレガントで透明なソリューションを探しています。 – Khue

答えて

2

この質問[tensorflow]をタグ付けするので、私はあなたがTensorFlowプログラムの一環としてEigen::Tensor使用していることを前提としています。 answerにはAziuth pointed in their commentがあり、テンソルを保持するためにラッパークラスを使用することを示唆しています。幸いにも、TensorFlowには独自のラッパークラスtensorflow::Tensorが付属しています。

さまざまテンソルのためのメモリを割り当て、およびtensorflow::Tensor::tensor()方法を使用してラップEigen::TensorオブジェクトにアクセスするためにTensorFlowのアロケータを使用し、std::vector<tensorflow::Tensor>を作成することができます。

+0

ありがとう、@ mrry。残念ながら、私はTensorFlowではなくEigen :: Tensorを純粋なC++で使用しています。私はTensorflowの人々がEigen :: Tensorにも非常に精通していると思ったので、「テンソルフロー」とタグ付けしました。申し訳ありませんが、それが混乱を招いた場合(しかし、あなたの答えはTensorflowユーザーにとっても非常に便利だと思います!) – Khue

+0

ああ!あなたはおそらく同様のものを実装する必要があります...おそらくコード[ここ](https://github.com/tensorflow/tensorflow/blob/a230417c58c258b2417225c739a1e5f0890491e6/tensorflow/core/framework/tensor.h)は簡単に切断できますあなたの目的のためにダウン.... – mrry

+0

ありがとう、@mrry!そのTensorflowコードは非常に便利です。それを使う方法を考えてみましょう。 – Khue

関連する問題