как глубоко скопировать собственный блок в вектор? - PullRequest
0 голосов
/ 30 октября 2019

Я загружаю собственную матрицу A (5,12) и хочу назначить новый собственный вектор в качестве первых 7 значений первой строки матрицы A. Почему-то это не работает ...

Позже я понимаю, что блок возвращает указатель на исходные данные. Как глубоко скопировать блок в Eigen Vector?

Eigen::MatrixXd A(5,12);
Eigen::VectorXd B(12); B = local_object_poses.row(0);
Eigen::VectorXd C(7); C = object_pose_line.head(7);

1 Ответ

1 голос
/ 30 октября 2019

Блочные методы, такие как block, col, row, head и т. Д., Возвращают представления исходных данных, но оператор = всегда выполняет глубокое копирование, поэтому вы можете просто написать:

VectorXd C = A.row(0).head(7);

Это выполнит одну глубокую копию. С Eigen 3.4 API для нарезки вы также сможете написать:

VectorXd C = A(0,seqN(0,7));
...