Как инициализировать содержимое большой матрицы в 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()
могут дать вам то, что вы хотите, создавая матрицу динамически.