从整数向量构造对角矩阵:函数本征
Constructing a diagonal matrix from vector of integers: function eigen
我有一个整数向量,我想用vectos的元素作为矩阵的对角项来构造一个对角矩阵。例如:若矢量为1 2 3
,则对角矩阵为:
1 0 0
0 2 0
0 0 3
做这件事的天真方法就是对它进行迭代并逐个设置元素。在eigen
中,是否没有其他直接方法可以做到这一点。同样,在构造对角线之后,我想计算倒数(这只是颠倒对角线条目),但在库本身中似乎也没有这样做的方法(直接地,这也会被优化)。
我在eigen
库中查找了对角矩阵的文档,但似乎没有办法。如果我在阅读文档时遗漏了一些明显的内容,请指出。
感谢您的帮助。
根据文档的这一部分,您有很多选项,最简单的是
auto mat = vec.asDiagonal();
除非你真的知道你在做什么,否则你应该使用Eigen的正确类型
//Create a 4x4 diagonal matrix from the vector [ 5 6 7 8 ]
Eigen::Vector4d vec;
vec << 5, 6, 7, 8;
Eigen::DiagonalMatrix<double, 4> mat = vec.asDiagonal();
使用auto是一个非常棘手的问题,通常你不知道编译器使用什么作为类型,再加上Eigen,这是发现棘手错误的常见来源之一(请参阅https://eigen.tuxfamily.org/dox/TopicPitfalls.html)
您也可以用另一种方法来实现,这允许您设置超级/子对角。
MatrixXd A = ...;
A.diagonal(0) = values_vector; //for 'main' diagonal
A.diagonal(1) = other_values; //for 1st super-diagonal
参见特征矩阵对角线()参考(还有一个例子)
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用向量的template_back函数
- 如何通过派生类函数更改基类中的向量
- 变量没有改变?通过向量的函数调用
- 一对向量构造函数:初始值设定项列表与显式构造
- 在c++中使用向量时,如何调用构造函数和析构函数
- std::sort()函数无法对向量的一部分进行排序
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- C++中函数的向量返回类型引发错误
- 添加存储在向量中的大整数的函数出现问题
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 具有 lambda 函数的函数向量
- 你能用参数制作函数向量吗?
- 在C++中使用成员函数向量时,有没有办法实现协变返回类型
- 在编写 lambda 函数向量时出现隔离错误
- 如何在 boost.process 间共享内存中使用复杂结构"push_back"函数向量
- 是否将std矢量重新分配到默认的构造函数向量是擦除的好方法
- 运行提升for_each中的成员函数向量
- 创建和回推函数向量
- C++,指向函数向量的指针的STL映射