Допустим, у меня есть Eigen::MatrixXd m
, я могу получить его строку i с помощью m.row(i)
. Я также могу получить указатель на этот фрагмент по auto p = m.row(i).data()
. Это должно вернуть указатель на первый элемент строки. На этом этапе, однако, поскольку MatrixXd сохраняет массив в основном столбце, этот указатель не будет указывать на непрерывный блок строки матрицы, которую я хотел бы использовать позже для передачи функции Eigen :: Map.
Например, я хочу сделать
auto m2 = Eigen::Map<MatrixXd>(p, rows, cols);
Я не смогу получить то, что хотел, потому что непрерывный блок не соответствует представлению строки.
Это предназначено поведение? Я думаю, единственный способ - сначала переставить его, а затем вместо этого получить col? Будет ли это неэффективно?
Изменить: транспонирование не будет работать, оно также возвращает указатель на тот же массив, который находится в том же порядке.
Более широкий вопрос. Работая с Eigen, мне часто приходилось преобразовывать матрицу в тензор и обратно, я делал это с помощью TensorMap и Map. Однако, когда я работаю с фрагментом данных, например, конвертирую строку матрицы в тензорный тип, как лучше всего этого добиться? Использование вышеуказанного метода карты не сработает, поэтому, я думаю, мне нужно немного скопировать?