在Eigen中覆盖和扩展没有其大小定义的数组或矩阵

时间:2016-02-11 17:01:11

标签: c++ arrays eigen

我想扩展和覆盖下面的数组。

示例(阵列A和B):

 A=   1   2
      4   8

 B = -1  -2
     -3  -4

结果(从A.row(1)上覆盖A上的B):

 C= 1  2 
   -1 -2
   -3 -4

下面的代码定义了Matrix创建之前的大小,不能覆盖另一个矩阵。

 #include <iostream>
 #include <stdlib.h>
 #include <Eigen/Dense>
 int main (int argc, char * argv [])
 {
    MatrixXd m (2, 2);
    m << 1, 2, 4, 8;
    MatrixXd n (2, 2);
    n << -1, -2, -3, -4;
    MatrixXd k (4, 2);
    k << 
       m,
       n;

     std::cout << k << std::endl;

    return EXIT_SUCCESS;
}

有没有办法在没有大小定义的情况下获得结果 (即没有这个:k (4, 2);)?

1 个答案:

答案 0 :(得分:1)

您可以使用block operations执行问题第一部分中的提问。例如,您可以将示例修改为

 #include <iostream>
 #include <Eigen/Core>
 int main ()
 {
    Eigen::MatrixXd m (2, 2);
    m << 1, 2, 4, 8;
    Eigen::MatrixXd n (2, 2);
    n << -1, -2, -3, -4;
    Eigen::MatrixXd c (3, 2);
    std::cout << c << "\n\n";
    c.topRows(2) = m;
    std::cout << c << "\n\n";
    c.bottomRows(2) = n;

    std::cout << c << "\n\n";

    return 0;
}

您可以像我一样使用更通用的block()或使用specific blocks

关于是否可以跳过矩阵维度的定义(k (4, 2);),答案实际上并非如此,除非您指定了正确维度的矩阵,在这种情况下,大小调整是隐含的。