【问题标题】:Eigen: Concatenating matrices and vectors特征:连接矩阵和向量
【发布时间】:2015-03-11 00:09:13
【问题描述】:

使用 Eigen C++ 库,我有一个 Matrix3f A、一个 Vector4f b 和一个 Vector4f c。我想用这些创建一个 Matrix4f M。我希望M 的顶部 3×3 角是 A,我希望 M 的最后一列是 b,我希望 M 的底行是 c .

我知道如何通过简单地创建一个 Matrix4f 并单独分配每个元素来做到这一点。但是有没有 Eigen 支持的更优雅的解决方案?

【问题讨论】:

    标签: matrix eigen


    【解决方案1】:

    这算不算优雅?

    #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) 位置将由 bc 之间的分配顺序决定。

    【讨论】:

    • 如果b 实际上是一个 Vector3f 怎么办?您还能使用m.col(3) = b 将最后一列的前三个元素分配给b,还是b 必须是Vector4f?
    • @Karnivaurus 不,它们的大小必须相同。您可以指定m.block(0,3,3,1) = b;
    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2018-10-31
    • 2019-04-27
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多