【问题标题】:Add row and column at zero position in matrix Eigen在矩阵 Eigen 中的零位置添加行和列
【发布时间】:2013-03-09 20:10:25
【问题描述】:

我有一个矩阵,例如:C(400,400)

我想用一个向量来增长这个矩阵:这个矩阵的行和列在矩阵的开始索引 0 处,例如:

矩阵 C:

 3 2 5 
 4 5 6
 7 8 20

我的新向量:25 5 6 8

结果:

  25 5 6 8
  5  3 2 5 
  6  4 5 6
  8  7 8 20

Eigen 中最好的方法是什么?使用.resize().set?感谢帮助

【问题讨论】:

    标签: vector matrix eigen


    【解决方案1】:

    我能想到的最好的是:

    Eigen::MatrixXd newC(C.rows()+1, C.cols()+1);
    newC << v.transpose(), v.tail(v.size()-1), C;
    C.swap(newC);
    

    这假设您的“新向量”作为列向量存储在v 中。在这个片段之后不再需要变量newC

    【讨论】:

      【解决方案2】:

      虽然我也会使用 Jitse 的方法,但为了给您另一种选择,这里有一个更详细的解决方案,并且可能会更好地显示零件的位置:

      Eigen::MatrixXd newC(C.rows()+1, C.cols()+1);
      newC.topRows<1>() = v.transpose();
      newC.leftCols<1>() = v;
      newC.bottomRightCorner(C.rows(),C.cols()) = C;
      C.swap(newC)
      

      请注意,这会将左上角元素分配两次;如果你不想这样,把第三行换成这个丑陋的:

      newC.topRows<1>().tail(v.size()-1) = v.transpose().tail(v.size()-1);
      

      最后说明为什么我们不使用resize:它总是会丢弃您的矩阵内容(即使在缩小矩阵时),除非元素的数量保持完全相同,即当您调整MxN 矩阵大小为(M*k)x(N/k)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多