Я загружаю собственную матрицу 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