Я загружаю собственную матрицу A (5,12), и я хотел бы назначить новый собственный вектор в качестве первых 7 значений первой строки матрицы A. Почему-то это не работает ...
Позже я понимаю, что блок возвращает указатель на исходные данные. Как глубоко скопировать блок в собственный вектор?
Eigen::MatrixXd A(5,12);
Eigen::VectorXd B(12); B = A.row(0);
Eigen::VectorXd C(7); C = B.head(7);
3
Hale Qiu
30 Окт 2019 в 00:56
1 ответ
Лучший ответ
Блочные методы, такие как block
, col
, row
, head
и т. Д., Возвращают просмотры исходных данных, но оператор =
всегда выполняет глубокое копирование, поэтому вы можете просто написать:
VectorXd C = A.row(0).head(7);
Это выполнит одну глубокую копию. С помощью API среза Eigen 3.4 вы также сможете писать:
VectorXd C = A(0,seqN(0,7));
2
ggael
30 Окт 2019 в 05:07
Похожие вопросы
Новые вопросы
eigen
Eigen - это библиотека шаблонов C ++ для линейной алгебры: матрицы, векторы и связанные алгоритмы.