2016-08-25 2 views
1

Каков наилучший (канонический) способ реализовать vec -оператор в собственном? Я уверен, что этот вездесущий оператор будет реализован, но я не могу найти его в документации.Оператор Canonical vec в Eigen

В настоящее время, для матрицы M, я:

Eigen::Map<Eigen::VectorXd> tmp(nullptr, 0); 
new (&tmp) Eigen::Map<Eigen::VectorXd>(M.data(), M.size()); 

ответ

0

Существует conservativeResize, который вы не ищете, так как это может реально изменить некоторые значения. Лично я использую ваш метод (за исключением размещения нового). Вы также можете указать, что карта выровнена. Карта - это способ просмотра одной и той же памяти с другим видом (, например,). Если вы хотите создать реальный перестроенный объект, вы можете создать копию (через карту). Вы также можете использовать resize, который не является оператором, если размер тот же. Я не думаю, что изменение размера будет работать с матрицами фиксированного размера, но карта будет. Выполните приведенный ниже код для примера.

Eigen::MatrixXf mat; 
mat.resize(3,3); 
mat << 1, 2, 3, 4, 5, 6, 7, 8, 9; 
std::cout << mat << "\n\n"; 
mat.resize(9, 1); 
std::cout << mat << "\n\n"; 
mat.conservativeResize(1, 9); 
std::cout << mat << "\n\n"; 
+0

Могу ли я использовать тот же консервативный методResize для векторов и матриц всех размеров и вкусов (динамический, фиксированный)? – Mankka

+0

Пример изменения формы, где я получил свой код, но он все еще далек от реального оператора vec. – Mankka