Изменение размера матрицы вверх и влево с Eigen Library - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь изменить размер моей матрицы с помощью того, что мы могли бы сказать, что это отрицательные индексы, означающие, что они должны быть влево и вверх от начала координат (0,0) этой матрицы. Я пытался с grid.resize (-20, -20), но он не работает.

Любые идеи полезны. Спасибо!

1 Ответ

0 голосов
/ 02 июля 2018

В любом случае это невозможно сделать на месте, поэтому просто создайте новую (достаточно большую) матрицу, скопируйте исходную матрицу в большую матрицу и переместите / поменяйте местами матрицы. Пример реализации (может быть обобщен для LeftDown / RightUp / ... - также эта реализация предполагает, что up и left неотрицательны):

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);
}
...