国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Eigen 矩陣Matrix及其簡單操作

這篇具有很好參考價值的文章主要介紹了Eigen 矩陣Matrix及其簡單操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. Matrix類

在Eigen,所有的矩陣和向量都是Matrix模板類的對象,Vector只是一種特殊的矩陣(一行或者一列)。
Matrix有6個模板參數(shù),主要使用前三個參數(shù),剩下的有默認值。

Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

Scalar是表示元素的類型,RowsAtCompileTime為矩陣的行,ColsAtCompileTime為矩陣的列。

庫中提供了一些類型便于使用,比如:

typedef Matrix<float, 4, 4> Matrix4f;

2. Vectors向量

列向量

typedef Matrix<float, 3, 1> Vector3f;

行向量文章來源地址http://www.zghlxwxcb.cn/news/detail-519562.html

typedef Matrix<int, 1, 2> RowVector2i;
一、矩陣的定義
Matrix<double, 3, 3> A;                // A.定義3x3double 矩陣
Matrix<double, 3, Dynamic> A;          //定義3xn double 矩陣,列為動態(tài)變化
Matrix<double, Dynamic, Dynamic>  A;   // 定義 double 矩陣,行、列為動態(tài)變化,由需要決定
MatrixXd A;                            // 定義 double 矩陣,行、列為動態(tài)變化,由需要決定
Matrix<double, 3, 3, RowMajor>  A;     // 定義3x3 double 矩陣,按行儲存,默認按列儲存效率較高。
Matrix3f  A;                           // 定義3x3 float 矩陣A.
Vector3f  A;                           // 定義3x1 float 列向量A.
VectorXd  A;                           // 定義動態(tài)double列向量A
RowVector3f  A;                        // 定義1x3 float 行向量A.
RowVectorXd  A;                        // 定義動態(tài)double行向量A.

二、基礎(chǔ)用法
// Eigen        // Matlab           // comments
A.size()        // length(x)        // 元素個數(shù)
C.rows()        // size(C,1)        // 行個數(shù)
C.cols()        // size(C,2)        // 列個數(shù)

A(i)            // x(i+1)           // 默認情況下列優(yōu)先,訪問(0,i)的元素
C(i, j)         // C(i+1,j+1)       //訪問(i, j)的元素。
A.resize(4, 4);       // 運行時,如果之前已經(jīng)定義過形狀則會報錯。
B.resize(4, 9);       // 運行時,如果之前已經(jīng)定義過形狀則會報錯。
A.resize(3, 3);       // Ok; size didn't change.
B.resize(3, 9);       // Ok; only dynamic cols changed.
 
A << 1, 2, 3,     // Initialize A. The elements can also be
     4, 5, 6,     // matrices, which are stacked along cols
     7, 8, 9;     // and then the rows are stacked.
B << A, A, A;     // B is three horizontally stacked A's.
A.fill(10);       // Fill A with all 10's.

三、特殊矩陣定義
// Eigen                                                
//單位矩陣定義
MatrixXd::Identity(rows,cols)       
C.setIdentity(rows,cols)            
//零矩陣定義
MatrixXd::Zero(rows,cols)          
C.setZero(rows,cols)              
//全1矩陣定義
MatrixXd::Ones(rows,cols)         
C.setOnes(rows,cols)               
//隨即矩陣定義
MatrixXd::Random(rows,cols)            
C.setRandom(rows,cols)          
//線性陣定義
VectorXd::LinSpaced(size,low,high)  
v.setLinSpaced(size,low,high)     

四、矩陣分塊
// 下面x為列或行向量,P為矩陣
**************************只能對向量操作************************************
x.head(n)                          // 列向量的前n個元素
x.head<n>()                        // 行向量的前n個元素
x.tail(n)                          // 列向量的倒數(shù)n個元素
x.tail<n>()                        // 行向量的倒數(shù)n個元素
x.segment(i, n)                    // 行向量從i開始的n個元素
x.segment<n>(i)                    // 列向量從i開始的n個元素
**************************只能對矩陣操作******************************************
P.block(i, j, rows, cols)          // 從i行j列開始的rows行cols列塊。
P.block<rows, cols>(i, j)          //  從i行j列開始的rows行cols列塊
P.row(i)                           // 矩陣P的第i行元素
P.col(j)                           // 矩陣P的第j列元素
P.leftCols<cols>()                 // P矩陣左邊cols列元素
P.leftCols(cols)                   //P矩陣左邊cols列元素
P.middleCols<cols>(j)              // P矩陣第j列開始的cols列元素
P.middleCols(j, cols)              // P矩陣第j列開始的cols列元素
P.rightCols<cols>()                // P矩陣右邊cols列元素
P.rightCols(cols)                  // P矩陣右邊cols列元素
P.topRows<rows>()                  // P矩陣前rows行元素
P.topRows(rows)                    // P矩陣前rows行元素
P.middleRows<rows>(i)              // P矩陣第i行開始的row行元素
P.middleRows(i, rows)              // P矩陣第i行開始的row行元素
P.bottomRows<rows>()               // P矩陣倒數(shù)row行
P.bottomRows(rows)                 // P矩陣倒數(shù)row行
P.topLeftCorner(rows, cols)        // P矩陣左上角rows行,cols列元素
P.topRightCorner(rows, cols)       // P矩陣右上角rows行,cols列元素
P.bottomLeftCorner(rows, cols)     
P.bottomRightCorner(rows, cols)    
P.topLeftCorner<rows,cols>()       
P.topRightCorner<rows,cols>()      
P.bottomLeftCorner<rows,cols>()    
P.bottomRightCorner<rows,cols>()   

五、矩陣元素交換                      
R.row(i) = P.col(j);    //可以將P的列元素去替換R的行元素
R.col(j1).swap(P.col(j2));  //將P的列元素和R的列元素進行互換


六、矩陣轉(zhuǎn)置                       
R.adjoint()                        // R矩陣的伴隨矩陣
R.transpose()                      // R矩陣的轉(zhuǎn)置
R.diagonal()                       // R矩陣的跡,用列表示
x.asDiagonal()                     // 對角矩陣
R.reverse()                        // R矩陣逆時針旋轉(zhuǎn)180度(反轉(zhuǎn))
R.colwise().reverse(); 			// R矩陣的列反轉(zhuǎn)
R.rowwise().reverse(); 			// R矩陣的行反轉(zhuǎn)
R.transpose().colwise().reverse(); // R矩陣逆時針旋轉(zhuǎn)90度
R.transpose().rowwise().reverse(); // R矩陣順時針旋轉(zhuǎn)90度
R.conjugate()                      // conj(R)共軛矩陣


七、矩陣乘積
// Matrix-vector.  Matrix-matrix.   Matrix-scalar.
y  = M*x;          R  = P*Q;        R  = P*s;
a  = b*M;          R  = P - Q;      R  = s*P;
a *= M;            R  = P + Q;      R  = P/s;
                   R *= Q;          R  = s*P;
                   R += Q;          R *= s;
                   R -= Q;          R /= s;

八、矩陣內(nèi)部元素操作
// Vectorized operations on each element independently
// Eigen                  // Matlab
R = P.cwiseProduct(Q);    // R = P .* Q對應(yīng)點乘
R = P.array() * s.array();// R = P .* s對應(yīng)點乘
R = P.cwiseQuotient(Q);   // R = P ./ Q對應(yīng)點除
R = P.array() / Q.array();// R = P ./ Q對應(yīng)點除
R = P.array() + s.array();// R = P + s  對應(yīng)點加
R = P.array() - s.array();// R = P – s  對應(yīng)點減
R.array() += s;           // R = R + s
R.array() -= s;           // R = R - s
R.array() < Q.array();    // R < Q  //Q矩陣元素比較,會在相應(yīng)位置置0或1
R.array() <= Q.array();   // R <= Q //Q矩陣元素比較,會在相應(yīng)位置置0或1
R.cwiseInverse();         // 1 ./ P   //1點除以P
R.array().inverse();      // 1 ./ P   //1點除以P
R.array().sin()           // sin(P)
R.array().cos()           // cos(P)
R.array().pow(s)          // P .^ s
R.array().square()        // P .^ 2
R.array().cube()          // P .^ 3
R.cwiseSqrt()             // sqrt(P)
R.array().sqrt()          // sqrt(P)
R.array().exp()           // exp(P)
R.array().log()           // log(P)
R.cwiseMax(P)             // max(R, P) //max(R, P) 對應(yīng)取大
R.array().max(P.array())  // max(R, P) //min(R, P) 對應(yīng)取小
R.cwiseMin(P)             // min(R, P)
R.array().min(P.array())  // min(R, P)
R.cwiseAbs()              // abs(P)
R.array().abs()           // abs(P)
R.cwiseAbs2()             // abs(P.^2)
R.array().abs2()          // abs(P.^2)
(R.array() < s).select(P,Q);  // (R < s ? P : Q)
附:
要取得[a,b)的隨機整數(shù),使用(rand() % (b-a))+ a;

要取得[a,b]的隨機整數(shù),使用(rand() % (b-a+1))+ a;

要取得(a,b]的隨機整數(shù),使用(rand() % (b-a))+ a + 1;

通用公式:a + rand() % n;其中的a是起始值,n是整數(shù)的范圍。

要取得a到b之間的隨機整數(shù),另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。

要取得0~1之間的浮點數(shù),可以使用rand() / double(RAND_MAX)。

到了這里,關(guān)于Eigen 矩陣Matrix及其簡單操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • [Eigen中文文檔] 稀疏矩陣操作

    [Eigen中文文檔] 稀疏矩陣操作

    文檔總目錄 英文原文(Sparse matrix manipulations) 處理和解決稀疏問題涉及各種模塊,總結(jié)如下: 模塊 頭文件 內(nèi)容 SparseCore #includeEigen/SparseCore SparseMatrix和SparseVector類、矩陣集合、基本稀疏線性代數(shù)(包括稀疏三角求解器) SparseCholesky #includeEigen/SparseCholesky 直接稀疏LLT和LDLT Chole

    2024年02月10日
    瀏覽(23)
  • Eigen線性代數(shù)庫學習大全

    Eigen線性代數(shù)庫學習大全

    ? ? ? ? Eigen是C++的線性代數(shù)庫,能提供有關(guān)矩陣的線性代數(shù)運算,還包含解方程等功能。 目錄 0、Eigen庫結(jié)構(gòu)導圖 1、Eigen庫安裝 2、Eigen庫矩陣基礎(chǔ)(參考) 2.1 矩陣模板函數(shù)? ? ? ? 2.2 類型 2.3 賦值與訪問 2.4 調(diào)整與操作? 2.4 運算 2.5 解方程? 3、Eigen庫的向量基礎(chǔ) 3.1?類型與

    2024年02月16日
    瀏覽(15)
  • [Eigen中文文檔] 線性代數(shù)與分解

    文檔總目錄 英文原文(Linear algebra and decomposition) 本節(jié)說明如何求解線性系統(tǒng),計算各種分解,如 LU 、 QR 、 SVD 、 特征分解 …… 求解基本線性系統(tǒng) 問題 :有一個方程組,寫成矩陣方程如下: A x = b Ax = b A x = b 其中 A A A 和 b b b 是矩陣(作為一種特殊情況, b b b 也可以是一個

    2024年02月07日
    瀏覽(25)
  • SLAM——Eigen函數(shù)庫之矩陣塊運算,高階操作middleCols與segment用法

    Eigen/四元數(shù)/歐拉角/旋轉(zhuǎn)矩陣 相關(guān)系列文章 Eigen/Matlab 使用小結(jié) SLAM——之Eigen入門(矩陣運算及幾何模塊) SLAM——之Eigen函數(shù)庫,一個相對復雜的EIgen使用實例 SLAM——Eigen函數(shù)庫:矩陣塊運算,block操作 SLAM——Eigen函數(shù)庫之 Eigen::Ref 使用實例 歐拉角和旋轉(zhuǎn)矩陣相互轉(zhuǎn)換 四元數(shù)

    2024年02月10日
    瀏覽(24)
  • pytorch3d旋轉(zhuǎn)矩陣轉(zhuǎn)四元數(shù)transforms.matrix_to_quaternion函數(shù)隱藏的大坑及其解決方法

    pytorch3d旋轉(zhuǎn)矩陣轉(zhuǎn)四元數(shù)transforms.matrix_to_quaternion函數(shù)隱藏的大坑及其解決方法

    ??在pytorch旋轉(zhuǎn)矩陣轉(zhuǎn)四元數(shù)及各種旋轉(zhuǎn)表示方式之間的轉(zhuǎn)換實現(xiàn)代碼這篇博客里,我提到可以使用pytorch3d實現(xiàn)批量旋轉(zhuǎn)表示方法之間的轉(zhuǎn)換。但是最近在使用它的matrix_to_quaternion函數(shù)的時候,發(fā)現(xiàn)了一個隱藏的巨大bug:它不會確保輸出的四元數(shù)中的那個實數(shù)w恒為正。這樣就

    2024年02月13日
    瀏覽(35)
  • Eigen-高級矩陣初始化

    Eigen-高級矩陣初始化

    Eigen提供了一個逗號初始化語法,允許用戶輕松設(shè)置矩陣、向量或數(shù)組的所有系數(shù)。簡單地列出系數(shù),從左上角開始,從左到右,從上到下。對象的大小需要事先指定。如果你列出的系數(shù)太少或太多,Eigen就會報錯。 此外,初始化列表的元素本身可以是向量或矩陣。 一個常見

    2024年04月27日
    瀏覽(28)
  • [Eigen中文文檔] 矩陣與向量運算

    專欄總目錄 英文原文(Matrix and vector arithmetic) 本文章旨在提供有關(guān)如何使用 Eigen 在矩陣、向量和標量之間執(zhí)行算術(shù)操作的概述和一些詳細信息。 介紹 Eigen 通過重載常見的 C++ 算術(shù)運算符(如 + 、 - 、 * )或通過特殊方法(如 dot() 、 cross() 等)提供矩陣/向量算術(shù)運算。對于

    2024年01月24日
    瀏覽(30)
  • Eigen 對矩陣的每個元素取絕對值

    ??使用Eigen庫對矩陣的每一個元素進行取絕對值操作非常簡單??梢允褂胊rray()函數(shù)將矩陣轉(zhuǎn)換為數(shù)組,然后使用abs()函數(shù)對數(shù)組中的每個元素取絕對值,最后使用matrix()函數(shù)將數(shù)組轉(zhuǎn)換回矩陣。下面是一個示例代碼:

    2024年02月04日
    瀏覽(34)
  • C++矩陣計算-雜記(包含Eigen庫的安裝)

    C++可以使用多種方法進行矩陣計算,其中常見的兩種方式為使用已有的矩陣庫或手寫矩陣運算代碼。 在C++中可以使用許多開源矩陣庫進行矩陣計算,比如Eigen、Armadillo等。這些庫提供了簡單易用的API,可以完成矩陣的基本運算,如加減乘除、轉(zhuǎn)置、求逆、求特征值和特征向量

    2024年02月02日
    瀏覽(39)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包