2017-03-21 5 views
1

私は私が行列を割り当てるしようとしています次C++の多次元固有値に値を代入するには?

res(0,0)(0) = 1; 

として値にアクセスして割り当てることができ、次の

Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic> res = Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic>:: 
     Constant(10, 
      10, 
      Eigen::VectorXd::Zero(3)); 

として定義され、スカラー型などのベクターと固有値行列を持っています以下、次の

res(all_rows,all_cols)(0) = matrix 

、各第3のインデックスは、自分のコード

であります
int main() 
{ 
    Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic> res = Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic>:: 
     Constant(10, 
      10, 
      Eigen::VectorXd::Zero(3)); 

    Eigen::MatrixXf x = Eigen::MatrixXf::Ones(10, 1)*2; 
    Eigen::MatrixXf y = Eigen::MatrixXf::Ones(10, 1); 
    Eigen::MatrixXf product = Eigen::MatrixXf::Zero(10, 10); 
    MatrixXd m(2, 2); 
    res(0, 0)(0) = 1; 
    m(0, 0) = 3; 
    m(1, 0) = 2.5; 

    m(0, 1) = -1; 
    m(1, 1) = m(1, 0) + m(0, 1); 
    product = x*y.transpose(); 
    res.block(0,0,10,10)(0) = x*y.transpose(); 
} 

しかし、私は、コードをコンパイルしようとすると、この行はエラー

res.block(0,0,10,10)(0) = x*y.transpose(); 

私は、次の次のエラーを取得していますを与えています。

Error C2338 THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS 

これを克服する方法はありますか、私のアプローチを変えるべきですか?

+1

すべての固有の利点(ベクトル化スカラ演算、(行、列)(チャンネル)などのような無奇妙なアクセスパターン)を取得しますEigen :: VectorXdである10x10ブロックのテンソルタイプを探しているようです。 – cassinaj

+1

Eigen :: VectorXdをスカラーとして使用する場合は、いくつかのスカラー演算を定義する必要があります。より良いオプションは、ランク3のEigen :: Tensor、または通常のスカラー(あなたの場合はダブル)のサイズ(3、幅*高さ)のフラット化された行列を使用することです – iNFINITEi

答えて

3

Eigen::VectorXdをスカラー型として使用しようとしています。したがって、Eigen::NumTraitshttps://eigen.tuxfamily.org/dox-devel/TopicCustomizing_CustomScalar.html

のように拡張していることを確認してください。マルチチャネルの配列や画像を再作成しようとしているようです。あなたは上記の方法で多くの利益を得ることはありません。より良いアイデアは、ランク3のEigen::Tensor、またはサイズ(3、幅*高さ)のフラット化されたマトリックスのいずれかを使用することです。そして、あなたはあなたが最初の要素に、外側積x * y^T行列を割り当てる

Eigen::Tensor<double, 3> rgb_image(height, width, 3); 
Eigen::MatrixXd rgb_image(3, width*height); // Each column is a pixel color 
+0

あなたの提案をありがとう –

関連する問題