2017-05-16 2 views
0

Eigenでは、私はM x kN実行列を持ち、デフォルトの列メジャー順に格納されています。 Mの各行には、N kタプルが含まれています。例えば、k=3, (a0 b0 c0 a1 b1 c1 ... aN bN cN)の場合。固有ベクトル行列またはベクトルからk番目の要素を選択しますか?

すべてのk-番目の要素を含むベクトル(または、行または列がkNベクトルのセットである行列)をどのように抽出できますか。などのEグラム、(a0 a1 ... aN), (b0 b1 ... bN)

64ビット版のWindows 7は、Visual C++

答えて

0

Eigen::Mapを使用してk * m.cols()に外側の歩幅を設定します。

#include <Eigen/Core> 
#include <iostream> 
int main() 
{ 
    int sz = 8; 
    Eigen::MatrixXd m(8,8); 

    Eigen::Map<Eigen::VectorXd>(m.data(), sz*sz).setLinSpaced(1., sz*sz); 

    std::cout << m << "\n\n"; 
    int k = 2; 
    Eigen::Map<Eigen::MatrixXd, 0, Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>> 
     mp(m.data(), sz, sz/k, Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>(k*m.cols(),1)); 

    std::cout << mp << "\n\n"; 

    Eigen::MatrixXd m2 = mp; 

    std::cout << m2 << "\n\n"; 

    return 0; 
} 
+0

私はあなたが 'mp * 'のストライドで' k * m.rows() 'を意味すると思います。その変更で、私は各タプルの正しい最初の要素を取得します。 2番目の、...、 'k番目の要素を取得する最も簡単な方法は何ですか? – Woody20

+0

'p '番目の要素を取得する最も簡単な方法は' m.data()+ p'を 'Map'に渡すことです。 –

+0

広告と同様に機能します。これで、マップ用のビジュアライザ(Visual Studio .natvisファイル)が必要になりました。 – Woody20