本征:连接矩阵和向量
Eigen: Concatenating matrices and vectors
使用 Eigen C++ 库,我有一个 Matrix3f A
、一个 Vector4f b
和一个 Vector4f c
。我想从中创建一个 Matrix4f M
。我希望 M
的顶部 3×3 角为 A
,我希望 M
的最后一列为 b
,我希望底行M
变为 c
.
我知道如何通过简单地创建一个 Matrix4f 并单独分配每个元素来做到这一点。但是有没有Eigen支持的更优雅的方案呢?
这样算不算优雅?
#include <Eigen/Sparse>
#include <iostream>
using namespace Eigen;
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
Matrix4f m = Matrix4f::Random();
Matrix3f A = Matrix3f::Constant(0.1);
Vector4f b = Vector4f::Constant(0.2), c = Vector4f::Constant(0.3);
cout << m << endl << endl;
cout << A << endl << endl;
cout << b << endl << endl;
cout << c << endl << endl;
m.block(0, 0, 3, 3) = A;
m.col(3) = b;
m.row(3) = c;
cout << m << endl << endl;
return 0;
}
请注意,您的问题有点模棱两可,因为 (3,3) 位置将由 b
和 c
之间的分配顺序决定。
使用 Eigen C++ 库,我有一个 Matrix3f A
、一个 Vector4f b
和一个 Vector4f c
。我想从中创建一个 Matrix4f M
。我希望 M
的顶部 3×3 角为 A
,我希望 M
的最后一列为 b
,我希望底行M
变为 c
.
我知道如何通过简单地创建一个 Matrix4f 并单独分配每个元素来做到这一点。但是有没有Eigen支持的更优雅的方案呢?
这样算不算优雅?
#include <Eigen/Sparse>
#include <iostream>
using namespace Eigen;
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
Matrix4f m = Matrix4f::Random();
Matrix3f A = Matrix3f::Constant(0.1);
Vector4f b = Vector4f::Constant(0.2), c = Vector4f::Constant(0.3);
cout << m << endl << endl;
cout << A << endl << endl;
cout << b << endl << endl;
cout << c << endl << endl;
m.block(0, 0, 3, 3) = A;
m.col(3) = b;
m.row(3) = c;
cout << m << endl << endl;
return 0;
}
请注意,您的问题有点模棱两可,因为 (3,3) 位置将由 b
和 c
之间的分配顺序决定。