Как преобразовать подматрицу в другую существующую матрицу без промежуточной матрицы (используя Eigen) - PullRequest
0 голосов
/ 25 апреля 2018

Я довольно новичок в Eigen. У меня есть первичный и вторичный вопрос.

Основной вопрос заключается в том, что я хотел бы скопировать подматрицу в другую существующую матрицу и изменить ее во время процесса без необходимости использования временной матрицы.

Вторичный вопрос похож, могу ли я сгенерировать вектор linSpaced и скопировать его в существующую матрицу с такими же размерами вектора без необходимости во временном векторе?

В следующем коде показаны решения с использованием временных переменных,

void main(void)
{
Eigen::Matrix<double,3,4> mOut;
mOut.setZero();

// generate linspaced data for mIn [SECONDARY QUESTION]
Eigen::Matrix<double,36,1> mIn;
Eigen::VectorXd tmpIn(Eigen::VectorXd::LinSpaced(36,0,35));
mIn = Eigen::Map<Eigen::Matrix<double,36,1>>(tmpIn.data());


std::cout << "mIn = " << mIn << std::endl;

// copy a subset of mIn into mOut [PRIMARY QUESTION]
Eigen::Matrix<double,12,1> tmpOut(mIn.block<12,1>(24,0));
mOut = Eigen::Map<Eigen::Matrix<double,3,4>>(tmpOut.data(),3,4);

std::cout << "mOut = " << mOut << std::endl;
}

Я попробовал следующее для основного вопроса, но это не сработало,

mOut = Eigen::Map<Eigen::Matrix<double,3,4>>(mIn.block<12,1>(24,0));

если выдал ошибку,

Error   5   error C2440: '<function-style-cast>' : cannot convert from 'Eigen::Block<XprType,BlockRows,BlockCols,InnerPanel>' to 'Eigen::Map<PlainObjectType,MapOptions>'   
...