2013-05-31 15 views
5

私は自分のコードにEigenのMatrixXd行列を使用しています。ある時点で私は3Dを必要とします。後で私はこの配列に値をアセスする必要がある、しかし固有ベクトルへのポインタの配列

Eigen::MatrixXd *CVM =new Eigen::MatrixXd[100]; 
for (int i = 0; i < 100; i++){ 
    CVM[i]= Eigen::MatrixXd::Zero(5,5); 
} 

:それはちょうど、線形代数のために最適化されるよう固有ではなく、私がMatrixXd型のポインタの配列を作成しています、三次元マトリックスの種類を持っていないので、 bは、ポインタではなくMatrixXdそのもので、b(i,j)は明らかに動作しませんので、代わりに私はcoeff()メソッドを使用しています、しかし、私は次のようになるにつれ

for (int k = 0; k < 100; k++){ 
    Eigen::MatrixXd* b=&CVM[k]; 

    for (int i = 0; i < 5; i++){ 
     for (int j = 0; j < 5; j++){ 
     b->coeff(i,j)=47; 
     }  
    } 
} 

:、そしてそのために私のような何かをやっていますエラー:

error: assignment of read-only location ‘b->Eigen::Matrix<double, -1, -1>::<anonymous>.Eigen::PlainObjectBase<Derived>::coeff<Eigen::Matrix<double, -1, -1> >(((Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1> >::Index)i), ((Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1> >::Index)j))’ 

EDIT:(*b)(i,j)、またはbのための参照を使用します:出力は、読み取り/書き込み参照、または逆参照bを取得するためにb->coeffRef(i,j)を使用するか

cout << b << endl; 
cout << CVM[47] << endl; 


0x1c34b00 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
+0

'C++'? [tag:C++] missing –

+0

'b 'は何ですか?また、ポインタの配列がありません。オブジェクトを保持する動的に割り当てられた配列があります。 – juanchopanza

+0

私はタイプミスがあると思います、2行目の 'a'は 'b'でしょうか? – ggael

答えて

4

を追加

MatrixXd& b = CVM[k]; 
b(i,j) = 47; 
1

ただ、演算子を使用します()(int、int)

CVM[k].operator()(i,j) = 47; 

または

CVM[k](i,j) = 47; 

又は

Eigen::MatrixXd* b = &CVM[k]; 
b->operator()(i,j) = 47; 

ここでkは行列であり、iが行であり、jは列です。