我对艾根很新。我有一个主要和次要的问题。
主要问题是我想将一个子矩阵复制到另一个现有矩阵中,并在此过程中重新整形,而不需要一个临时矩阵。
第二个问题是类似的,我可以生成linSpaced Vector并将其复制到具有相同向量维度的现有Matrix中,而不需要临时Vector吗?
以下代码显示了使用临时变量的解决方案
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>'