указатель на подстроку Eigen MatrixXd, которая ведет себя как VectorXd

0

У меня есть Eigen MatrixXd и требуется указатель на некоторые последующие записи некоторой строки. Я хотел бы иметь возможность использовать этот указатель. У меня есть что-то вроде этого:

Eigen::MatrixXd* matrix = new MatrixXd(3, 3);
(*matrix) <<    1, 2, 3,
                4, 5, 6,
                7, 8, 9;

Block<MatrixXd, 1, Dynamic, false, true> full_row = (*matrix).row(1);
// this gives me the full row. I am interested only in the row containing 5 6.

Block<MatrixXd> part_row = (*matrix).block(1, 1, 1, 2);
// this gives me the partial row that I want, but now i need two indices to 
// access an element. 

part_row(0, 1) = 3; // works
part_row(1) = 3; // gives compiler error

Я хотел бы иметь возможность прямого доступа к частичной строке без копирования значений. Это действительно важно, так как это нужно делать часто, и я не могу позволить себе копировать векторы туда и обратно. (Я считаю, что я не могу ожидать, что компилятор будет оптимизировать копирование, так как размеры матриц вообще неизвестны). Любая помощь приветствуется. Ура!

Теги:
eigen

1 ответ

0
Лучший ответ

Вам нужно указать, что ваша подматрица является вектором:

Block<MatrixXd,1,Dynamic> part_row(*matrix, 1, 1, 1, 2);
  • 0
    Вот и все, большое спасибо, вы сделали мой день!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню