conservativeResize(),新值为零值

时间:2014-08-14 21:12:29

标签: c++ eigen3

如何在调整矩阵大小后将新值设置为零?在调整矩阵大小后,将新值设置为垃圾值而不是至少设置为零,这真的很奇怪。

N = 0;
Eigen::MatrixXd CO;
CO.setZero(3+3*N, 3+3*N);
std::cout << CO << std::endl << std::endl;
Nt = 1;
CO.conservativeResize(3+3*Nt,3+3*Nt);
std::cout << CO << std::endl << std::endl;

结果

enter image description here

3 个答案:

答案 0 :(得分:7)

我使用conservativeResizeLike()

解决了这个问题
int Nt = 0;
Eigen::MatrixXd  CO;
CO.setOnes(3+3*Nt, 3+3*Nt);
std::cout << CO << std::endl << std::endl;
Nt = 1;
CO.conservativeResizeLike(Eigen::MatrixXd::Zero(3+3*Nt,3+3*Nt));
std::cout << CO << std::endl << std::endl;

结果

enter image description here

另外,我发现您可以将它们设置为Eigen::MatrixXd::Ones(3+3*Nt,3+3*Nt)或身份Eigen::MatrixXd::Identity(3+3*Nt,3+3*Nt)

身份

enter image description here

答案 1 :(得分:3)

这些值不是“垃圾”值,而是“未初始化的内存”值。您有责任将它们设置为对您有意义的任何值。如果你愿意,迭代新值并将它们归零应该不难。

答案 2 :(得分:0)

我不确定您正在使用哪个版本的Eigen。但是从今天起,Eigen具有 setZero() 函数,该函数 将该表达式中的所有系数设置为零。

以下是文档:Derived & Eigen::DenseBase< Derived >::setZero ( )