8

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

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;

结果

在此处输入图像描述

4

3 回答 3

9

我已经通过使用解决了这个问题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;

结果

在此处输入图像描述

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

对于身份

在此处输入图像描述

于 2014-08-14T21:55:19.023 回答
3

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

于 2014-08-14T21:15:27.493 回答
0

我不确定您使用的是哪个版本的 Eigen。但截至今天,Eigen 有一个setZero()函数可以将这个表达式中的所有系数设置为零。

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

于 2019-11-21T04:10:20.297 回答