MatrixXf A = MatrixXf::Random(3, 3);
MatrixXf B = A.row(1);
std::vector<float> vec;
我想用行Eigen矩阵“B”中的元素构建矢量“vec”。像这样“VEC = B.data()”如何从特征矩阵映射/构建C++向量?
MatrixXf A = MatrixXf::Random(3, 3);
MatrixXf B = A.row(1);
std::vector<float> vec;
我想用行Eigen矩阵“B”中的元素构建矢量“vec”。像这样“VEC = B.data()”如何从特征矩阵映射/构建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];
}
除了明显的答案(手动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-家训,所以它可能不会以更高的尺寸正常工作。
比较安全的是将'B'存储为'Eigen :: RowVectorXf'(vec'的初始化可以保持原样然后)。 – chtz
如果'B.data()'返回一个向量,那么你可以使用'vector :: insert'。如果它一次返回一个元素,那么你可以使用'vector :: push_back' – Nipun