2017-11-18 10 views
0

Eigen :: MatrixXdを作成する方法はありますか?各列は異なる '生の'ベクターから来ます。例えば、私はドキュメントからこのコードを取るたいと思います:2つの生ベクターから `Eigen :: Matrix`を作成する

int array[8]; 
for(int i = 0; i < 8; ++i) array[i] = i; 
cout << "Column-major:\n" << Map<Matrix<int,2,4> >(array) << endl; 

を、同様の

int array1[4]; 
int array2[4]; 
for(int i = 0; i < 4; ++i) array1[i] = i; 
for(int i = 4; i < 8; ++i) array2[i-4] = i; 
Eigen::Map<Eigen::MatrixXd> m(nullptr, 4, 2); 
m.col(0) = array1; 
m.col(1) = array2; 
cout << "Column-major:\n" << m << endl; 

か何かのように変更...これを実現する方法はありますか?それは2つだけの配列をなら

答えて

0

、あなたは進歩を乱用することができます

Map<MatrixXd,0,OuterStride<> > m(array1, 4, 2, OuterStride<>(array2-array1)); 

は、そうでなければ、簡単にNullaryExrの例次のコードの10行で何かを作ることができます。基本的に、あなたが必要とするすべてのクラスである:

class my_mat_type_func { 
    std::vector<double*> m_column_pointers; 
    Eigen::Index rows; 
public: 
    const double& operator() (Index row, Index col) const { 
    return m_column_pointers[col][row]; 
    } 
    // custom API to fill data, resize, etc. 
}; 

NullaryExprとしてそれを包みます。

関連する問題