向上调整矩阵大小,并与特征库一起左移

时间:2018-07-02 12:19:31

标签: c++ matrix eigen

我正在尝试使用可以说是负索引的矩阵来调整矩阵的大小,这意味着它们应该从该矩阵的原点(0,0)开始向左和向上移动。我已经尝试使用grid.resize(-20,-20),但是它不起作用。

任何想法都是有用的。谢谢!

1 个答案:

答案 0 :(得分:2)

这仍然不能就地完成,因此只需创建一个新的(足够大的)矩阵,将原始矩阵复制到更大的矩阵,然后移动/交换矩阵即可。示例实现(可以针对LeftDown / RightUp / ...进行一般化-而且该实现还假设upleft为非负数):

template<class Derived>
void resizeUpLeft(Eigen::DenseBase<Derived>& mat, Eigen::Index up, Eigen::Index left)
{
    typename Derived::PlainObject biggerMat(mat.rows()+up, mat.cols()+left);
    // Note: biggerMat will be filled with uninitialized values,
    // use setZero, if that is not desired
    // if allocation of biggerMat fails mat stays unchanged
    biggerMat.bottomRightCorner(mat.rows(), mat.cols()) = mat;
    // move or swap to avoid copy:
    mat.derived() = std::move(biggerMat);
    // with C++03:
    // mat.derived().swap(biggerMat);
}