Как инициализировать содержимое большой матрицы в Eigen?

Я пытаюсь инициализировать матрицу (используя библиотеку Eigen), чтобы иметь ненулевое значение, когда я ее создаю. Есть ли хороший способ сделать это без цикла for?

Например, если бы я хотел инициализировать всю матрицу до 1.0, я хотел бы сделать что-то вроде:

Eigen::MatrixXd mat(i,j) = 1.0;

или

Eigen::MatrixXd mat(i,j);
mat += 1.0;

(Я привык к этому типу вещей в MATLAB, и это сделало Eigen более приятным в использовании, чем это уже есть. Я подозреваю, что есть встроенный метод где-то, который делает это, чего я не нашел.)

Подзапросом к этому вопросу будет вопрос о том, как установить блок матричных элементов в заданное значение, что-то ilke:

mat.block(i,j,k,l) = 1.0;

Ответ 1

Как это часто бывает, я нашел ответ в документах в течение тридцати секунд после публикации вопроса. Я искал функцию Constant:

Eigen::MatrixXd mat = Eigen::MatrixXd::Constant(i, j, 1.0);

mat.block(i,j,k,l) = Eigen::MatrixXd::Constant(i, j, 1.0);

Ответ 2

Eigen::MatrixXd::Ones(), Eigen::MatrixXd::Zero() и Eigen::MatrixXd::Random() могут дать вам то, что вы хотите, создавая матрицу динамически.