2017-08-04 3 views
0
MatrixXf A = MatrixXf::Random(3, 3); 

MatrixXf B = A.row(1); 

std::vector<float> vec; 

私は、行列 "B"からの要素でベクトル "vec"を構築したいと考えています。明白な答え(手動push_back Sまたは事前割り当て+インデックス・バイ・インデックスの割り当て)に加えて固有行列からC++ベクトルをマップ/構築する方法は?

MatrixXf A = MatrixXf::Random(3, 3); 
MatrixXf B = A.row(1); 
std::vector<float> vec(B.size()); 
for(size_t row=0; row < vec.size(); row++) { 
    vec[row] = B[row]; 
} 
+0

'B.data()'がベクトルを返すならば、 'vector :: insert'を使うことができます。一度に1つの要素を返す場合、 'vector :: push_back'を使用することができます – Nipun

答えて

0

だけでループを使用するような何かただ、それが高次元で正しく動作しない場合がありますので、アイゲンは、SSE-家族命令を利用するためにメモリ配置を使用できることに注意してください

Eigen::MatrixXf A = Eigen::MatrixXf::Random(3, 3); 
Eigen::MatrixXf B = A.row(1); 

std::vector<float> vec(B.data(), B.data() + B.size()); 

:、あなたは直接::data()によって返されたベースポインタを使用して、それを初期化することができます。

1

:この「VEC = B.data()」

+0

' Bigen'を 'Eigen :: RowVectorXf'として保存する方が安全でしょう(' vec'の初期化はそのままです。その後)。 – chtz

関連する問題