如何在没有中间矩阵的情况下将子矩阵重塑为另一个现有矩阵(使用Eigen)

时间:2018-04-25 14:50:14

标签: eigen

我对艾根很新。我有一个主要和次要的问题。

主要问题是我想将一个子矩阵复制到另一个现有矩阵中,并在此过程中重新整形,而不需要一个临时矩阵。

第二个问题是类似的,我可以生成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>'   

0 个答案:

没有答案