Как заполнить собственный вектор другим собственным вектором?

#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() операции.