Начальное состояние собственных матриц по умолчанию с размерами Dynami c - PullRequest
0 голосов
/ 21 января 2020

В каком состоянии конструктор по умолчанию Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> оставляет матрицу? Это матрица 0x0?

В частности, если переменная объявлена ​​Eigen::MatrixXd A;, как я могу позже проверить, было ли что-то присвоено A? С A.size()==0, или есть какой-то специальный тест?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

"В частности, если переменная объявлена ​​Eigen::MatrixXd A;, как я могу позже проверить, было ли что-то присвоено A?"

Сравнить с той же конструкцией по умолчанию

if (A != Eigen::MatrixXd{})
    // ...
2 голосов
/ 21 января 2020

Из документации ,

Конструктор по умолчанию всегда доступен, никогда не выполняет динамического распределения памяти c и никогда не инициализирует матричные коэффициенты.

Обратите внимание, что при использовании конструктора по умолчанию для динамических c матриц также не назначаются их размеры. Итак,

Eigen::MatrixXd a;

- это матрица 0x0, а

Eigen::MatrixXd b(10, 10);

- это матрица 10x10 с неинициализированными коэффициентами;

Да, вы можете проверить, если матрица все еще 0x0, чтобы проверить, было ли ему что-то назначено.

Обратите внимание, что если размер не является динамическим c, он будет иметь определенное количество строк и / или столбцов, и это усложнит понимание того, было ли что-то назначено ему: вам следует инициализировать значения и затем проверить, были ли они изменены.

...