#c #eigen
Вопрос:
У меня есть определенное собственное vector1
и неопределенное собственное vector2
, как мне vector2
заполнить значения vector1
и последующие данные (удваивается), такие как:
Eigen::RowVectorXd vector1 = Eigen::RowVectorXd::Ones(1);
Eigen::RowVectorXd vector2;
vector2 << vector1, 2.0, 3.4 // Gives AssertionError
Ответ №1:
<<
Оператор может использоваться только для заполнения собственного вектора::, если его размер соответствует размеру предоставленных данных. Вы можете либо объявить вектор с правильным размером
Eigen::RowVectorXd vector2(vector1.size() 2);
или измените его размер
vector2.resize(vector1.size() 2);
перед использованием <<
оператора заполните значения.
Комментарии:
1. Спасибо, я попытался, сначала изменив размер, как
vector2.resize(vector1.size())
тогдаvector2 << vector1
. С последующимvector2.resize(vector1.size() 1)
его заполнениемvector2 << 2.0
. Но это выплевывает другоеAssertionError
, говоря:"Too few coefficients passed to comma initializer (operator<<)"
2. Я верю, что в вашей неудачной попытке вы хотели писать
vector2 << vector1, 2.0;
и неvector2 << 2.0
хотели . В противном случае размер vector2 должен был бы быть равен 1.3. Обратите внимание, что у Eigen нет функции «push_back». Правая сторона
<<
должна содержать все данные вектора.4. О, я понимаю, если бы я изменил размер
vector2
наvector2.resize(vector1.size() 1)
после заполненияvector2 << vector1
, исчезли бы элементыvector1
vector2
?5. Да, я бы предположил, что эти данные будут потеряны. Разработчики Eigen могли бы дать более точную информацию о конкретном поведении
resize()
, но я бы всегда считал, что вектор Eigen неинициализируется послеresize()
операции.