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

MatrixXf B = A.row(1); 

std::vector<float> vec; 

我想用行Eigen矩阵“B”中的元素构建矢量“vec”。像这样“VEC = B.data()”如何从特征矩阵映射/构建C++向量?

+0

如果'B.data()'返回一个向量,那么你可以使用'vector :: insert'。如果它一次返回一个元素,那么你可以使用'vector :: push_back' – Nipun

回答

0

只需使用一个循环:

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]; 
} 
1

除了明显的答案(手动push_back S或预分配+索引逐索引分配) ,你可以直接使用::data()返回的基指针初始化:

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

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

只是要小心的是本征可以使用内存对齐利用SSE-家训,所以它可能不会以更高的尺寸正常工作。

+0

比较安全的是将'B'存储为'Eigen :: RowVectorXf'(vec'的初始化可以保持原样然后)。 – chtz