У меня есть 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
Я хотел бы иметь возможность прямого доступа к частичной строке без копирования значений. Это действительно важно, так как это нужно делать часто, и я не могу позволить себе копировать векторы туда и обратно. (Я считаю, что я не могу ожидать, что компилятор будет оптимизировать копирование, так как размеры матриц вообще неизвестны). Любая помощь приветствуется. Ура!
Вам нужно указать, что ваша подматрица является вектором:
Block<MatrixXd,1,Dynamic> part_row(*matrix, 1, 1, 1, 2);