日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EIgen:Matricx和vector类的定义和使用

發布時間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EIgen:Matricx和vector类的定义和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Eigen中,所有矩陣和向量均為Matrix模板類的對象,向量是矩陣的行(或列)為1是的特殊情況。

1、矩陣的三參數模板

Matrix類有六個模板參數,其中三個有默認值,因此只要學習三個參數就足夠了。強制性的三參數模板的原型為:

Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

三個參數分別表示:標量的類型,編譯時的行,編譯時的列。

用typedef定義了很多模板,例如:Matrix4f 表示 4×4 的floats 矩陣:

typedef Matrix<float, 4, 4> Matrix4f;

2、向量(Vectors)

向量是矩陣的特殊情況,也是用矩陣定義的。定義如下:

typedef Matrix<float, 3, 1> Vector3f; typedef Matrix<int, 1, 2> RowVector2i;

3、特殊動態值(special value Dynamic)

Eigen的矩陣不僅能夠在編譯是確定大小(fixed size),也可以在運行時確定大小,就是所說的動態矩陣(dynamic size)。動態矩陣定義如下:

typedef Matrix<double, Dynamic, Dynamic> MatrixXd; typedef Matrix<int, Dynamic, 1> VectorXi;

也可使用‘行’固定‘列’動態的矩陣:

Matrix<float, 3, Dynamic>

4、構造函數(Constructors)

可以使用默認的構造函數,不執行動態分配內存,也沒有初始化矩陣參數:

Matrix3f a; MatrixXf b;
  • a 是3-by-3矩陣,包含未初始化的 float[9] 數組
  • b是動態矩陣,當前大小為 0-by-0, 沒有為數組的系數分配內存

矩陣的第一個參數表示“行”,數組只有一個參數。根據跟定的大小分配內存,但不初始化。

MatrixXf a(10,15); VectorXf b(30);
  • a 是10-by-15陣,分配了內存,沒有初始化
  • b是動態矩陣,當前大小為 30, 分配了內存,沒有初始化

對于給定的矩陣,傳遞的參數無效,如:

Matrix3f a(3,3);

對于維數最大為4的向量,可以直接初始化:

Vector2d a(5.0, 6.0); Vector3d b(5.0, 6.0, 7.0); Vector4d c(5.0, 6.0, 7.0, 8.0);

5、系數訪問

系數都是從0開始:

#include <iostream> #include <Eigen/Dense> using namespace Eigen; int main() {MatrixXd m(2,2);m(0,0) = 3;m(1,0) = 2.5;m(0,1) = -1;m(1,1) = m(1,0) + m(0,1);std::cout << "Here is the matrix m:\n" << m << std::endl;VectorXd v(2);v(0) = 4;v(1) = v(0) - 1;std::cout << "Here is the vector v:\n" << v << std::endl; }

矩陣默認按列存儲。
operator[] 在 vectors 中重載。matrix[i,j]和matrix[j]含義相同。

6、逗號分隔的初始化

Matrix3f m; m << 1, 2, 3,4, 5, 6,7, 8, 9; std::cout << m;

7、Resizing

可以用rows(), cols() and size() 改變現有矩陣的大小。這些類方法返回行、列、系數的數值。也可以用resize()來改變動態矩陣的大小。

總結

以上是生活随笔為你收集整理的EIgen:Matricx和vector类的定义和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。