Я довольно новичок в 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>'