这是一项非常简单的任务,但我无法找到答案:
使用Eigen库,假设我有Matrix2Xd mat
和Vector2d vec
,其中
mat = 1 1 1
1 1 1
vec = 2 2
现在我需要像mat.addCol(vec)
这样的东西,然后
mat = 1 1 1 2
1 1 1 2
实现这一目标的最佳(最简单)方法是什么?
请注意,这不是How do you make a matrix out of vectors in eigen?的副本。我不想初步构建矩阵,而是附加到现有矩阵中。或者是否有一个技巧,在这种情况下如何使用逗号初始化?以下代码将失败:
Matrix2Xd mat(2,3);
Vector2d vec;
mat << 1, 1, 1, 1, 1, 1;
vec << 2, 2;
cout << mat << endl;
mat << vec; // <-- crashes here
cout << mat << endl;
编辑:以下有效,但我不喜欢这种基本任务需要临时变量。还有更好的方法吗?
Matrix2Xd tmp(2, mat.cols()+1);
tmp << mat, vec;
mat = tmp;
答案 0 :(得分:15)
您可以将conservativeResize
用于此目的:
mat.conservativeResize(mat.rows(), mat.cols()+1);
mat.col(mat.cols()-1) = vec;