Я только начал использовать библиотеку Eigen и не могу понять, как добавить скалярное значение ко всем членам матрицы?
Предположим, что у меня есть матрица:
Eigen::Matrix3Xf mtx = Eigen::Matrix3Xf::Ones(3,4);
mtx = mtx + 1; // main.cxx:104:13: error: invalid operands to binary expression ('Eigen::Matrix3Xf' (aka 'Matrix<float, 3, Dynamic>') and 'int')
Я ожидаю, что результирующая матрица будет заполнена 2
Выполняя быстрый поиск в документации этой библиотеки, кажется, что такого метода нет. На самом деле в матричной алгебре обычно нет скалярной суммы. Вы можете реализовать такой метод самостоятельно, просто добавив скаляр к каждому компоненту матрицы i,j, перебирая все столбцы и строки.
Однако вы уверены, что не имели в виду скалярное умножение?
Спасибо за ответ. В матлабе есть такая операция как прибавление скаляра к матрице (вектору) и это сильно упрощает вычисления.
Поэлементные операции с Eigen лучше всего выполнять в области Array
. Ты можешь сделать
mtx.array() += 1.f;
Чуть более подробный вариант:
mtx += Eigen::Matrix3Xf::Ones(3,4);
Вы также должны рассмотреть возможность определения mtx
как Array3Xf
в первую очередь:
Array3Xf mtx = Eigen::Array3Xf::Ones(3,4);
mtx += 1.f;
Если вам затем нужно использовать mtx
в качестве матрицы (т. Е. В матричном произведении), вы можете написать
Vector3f v = mtx.matrix() * w;
Спасибо за ответ. Array3Xf mtx = Eigen::Array3Xf::Ones(3,4);
просто позволяет мне использовать его как матрицу/вектор или есть еще какие-то преимущества?
Пожалуйста, прочтите страницу с быстрой ссылкой документа Eigen: eigen.tuxfamily.org/dox/group__QuickRefPage.html
Собственные массивы имеют методы и операторы для сложения и умножения с учетом коэффициентов.