eigen模块

1.创建matrix

MatrixXf M = MatrixXf::Random(4, 62000);
MatrixXd M(4,1000);

创建vector

VectorXd x(Anta_M);

2.可以通过成员函数transpose()、conjugate()和 adjoint()来完成矩阵的转置,共轭矩阵,和共轭转置矩阵,注意这些函数返回操作后的结果,而不会对原矩阵的元素进行直接操作,如果要让原矩阵的进行转换,则需要使用响应的InPlace函数,例如:transposeInPlace() 、adjointInPlace() 之类。
3.求矩阵所有元素和、全部元素相乘、平均值、最小值、最大值、迹

MatrixXd mat;
double sum_m=mat.sum():              
double prd_m=mat.prd():              
double mean_m=mat.mean():             
double min_m=mat.minCoeff():        
double max_m=mat.maxCoeff():        
double trace_m=mat.trace(): 

4.将矩阵某一部分赋值
1)分别赋值某行到某行

MatrixXd Vn(4, 2);
    for (int i = 0; i < jam_num; i++)
        Vn.col(i) = eigen_vectors.col(ind(Anta_M - i - 1));
    cout << Vn << endl;

2)使用.block赋值,参数分别为(起始行,起始列,截断矩阵的行数,截断矩阵的列数)

    MatrixXd Vnn=eigen_vectors.block(0, 0, 4, 2);
    cout << Vnn << endl;

5.获取矩阵最大值的行数、列数

MatrixXd F(90, 180);
ptrdiff_t max_i, max_j;
double maxp_2 = F.maxCoeff(&max_i, &max_j);

6.矩阵分解

MatrixXd Rs = M * M_T / L;//欲分解的协方差矩阵Rs
    //cout << Rs.block(0, 0, 4, 2) << endl;
    //cout << Rs << endl;
    //cout << typeid(Rs).name() << "  ";//输出Rs类型    
    //矩阵分解过程
    SelfAdjointEigenSolver<MatrixXd> eigensolver(Rs);
    if (eigensolver.info() != Success) abort();
    VectorXd eigen_values = eigensolver.eigenvalues();//矩阵特征值
    MatrixXd eigen_vectors = eigensolver.eigenvectors();//矩阵特征向量     
    VectorXd eig_values_sorted;
    VectorXi ind;
    sort_vec(eigen_values, eig_values_sorted, ind);//将特征值按从小到大排序并返回排序后的特征值分别在原向量内的位置ind
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容