C++ 使用预定义的列表(使用特征值)将矩阵替换为对角矩阵
我有一个向量,我想用它来形成对角矩阵的向量 如下C++ 使用预定义的列表(使用特征值)将矩阵替换为对角矩阵,c++,matrix,eigen,C++,Matrix,Eigen,我有一个向量,我想用它来形成对角矩阵的向量 如下 double shapes=[2,3,4,5]; Vector2d temp; std::vector<Eigen::DiagonalMatrix<double, 2> > diavector; diavector.resize(4); for(int i=0;i<4;i++){ temp<<shapes[i],shapes[i];
double shapes=[2,3,4,5];
Vector2d temp;
std::vector<Eigen::DiagonalMatrix<double, 2> > diavector;
diavector.resize(4);
for(int i=0;i<4;i++){
temp<<shapes[i],shapes[i];
diavector[i]=temp.asDiagonal();
cout<<diavector[i].toDenseMatrix()<<endl;
}
现在,我想根据预先指定的列表,将重向量的元素放置到N矩阵的适当位置。例如,如果
double listIndices={0,2,3,5}
它给出了块所在的向量的位置
必须插入矩阵才能得到类似于N的矩阵
N=[2 0 0 0 3 0 4 0 0 0 5 0
0 2 0 0 0 3 0 4 0 0 0 5]
如何操作。您可以使用
N.middleCols(ListIndexes[i]*stride,stride)=temp.asDiagonal()
,例如,stride
等于2
N=[2 0 0 0 3 0 4 0 0 0 5 0
0 2 0 0 0 3 0 4 0 0 0 5]