1. 程式人生 > >Eigen: C++開源矩陣計算工具——安裝與使用

Eigen: C++開源矩陣計算工具——安裝與使用

因為最近在研究卡爾曼濾波,要用到矩陣運算,就想著用C++一次性把矩陣運算寫好吧,寫一半覺得這麼基礎的工具應該有人寫過吧,發現有很多庫!!

有人做了總結:

大家用得比較多的是Eigen,Eigen的特點:

(1) 使用方便、無需預編譯,呼叫開銷小

(2) 函式豐富,風格有點近似MATLAB,易上手;

(3) 速度中規中矩,比opencv快,比MKL、openBLAS慢;

Eigen的下載與安裝,可參考:
Matrix<double, 3, 3> A;               // Fixed rows and cols. Same as Matrix3d.
Matrix<double, 3, Dynamic> B;         // Fixed rows, dynamic cols.
Matrix<double, Dynamic, Dynamic> C;   // Full dynamic. Same as MatrixXd.
Matrix<double, 3, 3, RowMajor> E;     // Row major; default is column-major.
Matrix3f P, Q, R;                     // 3x3 float matrix.
Vector3f x, y, z;                     // 3x1 float matrix.
RowVector3f a, b, c;                  // 1x3 float matrix.
VectorXd v;                           // Dynamic column vector of doubles
基本使用方法
// Eigen          // Matlab           // comments
x.size()          // length(x)        // vector size
C.rows()          // size(C,1)        // number of rows
C.cols()          // size(C,2)        // number of columns
x(i)              // x(i+1)           // Matlab is 1-based
C(i,j)            // C(i+1,j+1)       //

A.resize(4, 4);   // Runtime error if assertions are on.
B.resize(4, 9);   // Runtime error if assertions are on.
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                            // Matlab
MatrixXd::Identity(rows,cols)       // eye(rows,cols)
C.setIdentity(rows,cols)            // C = eye(rows,cols)
MatrixXd::Zero(rows,cols)           // zeros(rows,cols)
C.setZero(rows,cols)                // C = ones(rows,cols)
MatrixXd::Ones(rows,cols)           // ones(rows,cols)
C.setOnes(rows,cols)                // C = ones(rows,cols)
MatrixXd::Random(rows,cols)         // rand(rows,cols)*2-1    // MatrixXd::Random returns uniform random numbers in (-1, 1).
C.setRandom(rows,cols)              // C = rand(rows,cols)*2-1
VectorXd::LinSpaced(size,low,high)  // linspace(low,high,size)'
v.setLinSpaced(size,low,high)       // v = linspace(low,high,size)'
矩陣四則運算
// All the same as Matlab, but matlab doesn't have *= style operators.
// Matrix-vector.  
y  = M*x;          
a  = b*M;         
a *= M;           
                  
// Matrix-matrix.  
R  = P*Q;        
R  = P - Q;     
R  = P + Q;      
R *= Q;          
R += Q;          
R -= Q;          

//Matrix-scalar.
R  = P*s;
R  = s*P;
R  = P/s;
R  = s*P;
R *= s;
R /= s;

相關推薦

Eigen: C++開源矩陣計算工具——安裝使用

因為最近在研究卡爾曼濾波,要用到矩陣運算,就想著用C++一次性把矩陣運算寫好吧,寫一半覺得這麼基礎的工具應該有人寫過吧,發現有很多庫!!!有人做了總結:大家用得比較多的是Eigen,Eigen的特點:(

Eigen C++開源矩陣計算工具——Eigen的簡單用法

Eigen非常方便矩陣操作,當然它的功能不止如此,由於本人只用到了它的矩陣相關操作,所以這裡只給出了它的一些矩陣相關的簡單用法,以方便快速入門。矩陣操作在演算法研究過程中,非常重要,例如在影象處理中二維高斯擬合求取光斑中心時使用Eigen提供的矩陣演算法,差不多十來行程式碼即可實現,具體可見:http:

Eigen: C++開源矩陣計算工具——Eigen的簡單用法

Eigen非常方便矩陣操作,當然它的功能不止如此,由於本人只用到了它的矩陣相關操作,所以這裡只給出了它的一些矩陣相關的簡單用法,以方便快速入門。矩陣操作在演算法研究過程中,非常重要,例如在影象處理中二維高斯擬合求取光斑中心時使用Eigen提供的矩陣演算法,差不多十來行程式碼即

C++開源矩陣計算工具——Eigen的簡單用法(三)

本節主要涉及Eigen的塊操作以及QR分解,Eigen的QR分解非常繞人,搞了很久才搞明白是怎麼回事,最後是一個使用Eigen的矩陣操作完成二維高斯擬合求取光點的程式碼例子,關於二維高斯擬合求取光點的詳細內容可參考:http://blog.csdn.net/hjx_1000

C++開源矩陣計算工具——Eigen的簡單用法(二)

本文主要是Eigen中矩陣和向量的算術運算,在Eigen中的這些算術運算過載了C++的+,-,*,所以使用起來非常方便。1、矩陣的運算Eigen提供+、-、一元操作符“-”、+=、-=,例如:二元操作符+/-表示兩矩陣相加(矩陣中對應元素相加/減,返回一個臨時矩陣): B+C

Flawfinder開源C/C++靜態掃描分析工具安裝使用

1.flawfinder的介紹 Flawfinder是一款開源的關於C/C++靜態掃描分析工具,其根據內部字典資料庫進行靜態搜尋,匹配簡單的缺陷與漏洞,flawfinder工具不需要編譯C/C++程式碼,可以直接進行掃描分析。簡單快速,最大的有點就是免費,不需要編譯。flawfinder工具可以

開源矩陣計算工具——Eigen的簡單用法

(一) 1、  矩陣的定義 Eigen中關於矩陣類的模板函式中,共有6個模板引數,但是目前常用的只有前三個,如下所示: template<typename _Scalar, int _Rows, int _Cols, int

TscanCode C/C++靜態分析開源分析工具安裝使用

TscanCode是騰訊靜態分析團隊開發的一款開源免費的C/C++靜態分析工具,由於其比較簡單實用,準確率較高,並且掃描C/C++程式碼不需要進行編譯,所以個人覺得對C/C++專案開發挺有幫助的,就簡單介紹一下該工具的安裝與使用。 1.Tscancode下載安裝 https://github

[圖解tensorflow源碼] 入門準備工作附常用的矩陣計算工具[轉]

cto org system open 協議 ring 矩陣 orf per [圖解tensorflow源碼] 入門準備工作附常用的矩陣計算工具[轉] Link: https://www.cnblogs.com/yao62995/p/5773142.html ?tens

IMAGE WATCH工具安裝學習

can col img demo 鏡像 數據斷點 read 縮略圖 顏色 1、下載安裝 從下載地址搜索IMAGE WATCH,即可下載自己所需要的IMAGE WATCH工具。 安裝ImageWatch,雙擊ImageWatch.vsix進行安裝即可; 2、使用

C&C++入門篇---CodeBlocks的安裝簡單配置

最近接觸C&C++語言,很多人都在用microsoft visual c++軟體,無奈本人安裝各種版本,由於與電腦不匹配,始終裝不上!有人說道可以通過換系統辦法解決,總不能為了裝這個軟體,而把我其它軟體全部解除安裝。所以就想到了這個軟體,簡單介紹下此軟體。 Code::Bloc

Ubuntu常用工具安裝設定

1. 初次登入設定root 密碼 輸入命令:sudo passwd 2. ubuntu系統安裝vim: 普通使用者下輸入命令:sudo apt-get install vim-gtk 剛安裝的VIM,可能介面並不是十分友好,這就需要我們去更改vim的配置檔案,按照我們

Android開發入門 -- 開發工具安裝設定

Android Studio安裝 IDE安裝 SDK安裝 第一次執行Android Studio,會提示要下載SDK; 進入Android Studio設定嚮導: 選擇下載的部件: 其中Performance部件會影響模擬器啟動的時間,確認選擇下載; 模

linux上 mysql資料庫備份還原 (xtrabackup工具安裝使用)

由於我安裝的mysql5.7是最新的版本,而一些老的xtrabackup版本已經不相容,所以在這裡我下載最新的xtrabackup工具 注:我這裡沒有應用全備和整備,而是用了部分備份,即一個數據庫的備份和恢復 環境:  centos7            mysql

NumSharp v0.6.5 .NET矩陣計算庫,TensorFlow.NET無縫融合

   NumSharp(Numerical .NET)可以說是C#中的科學計算庫。 它是用C#編寫的,符合.netstandard 2.0庫標準。 它的目標是讓.NET開發人員使用NumPy的語法編寫機器學習程式碼,從而最大限度地借鑑現有大量在python程式碼的轉譯成本。

C++ opengl 矩陣的壓棧出棧

矩陣的壓棧與出棧 讓兩個重合的三角形,分開 程式執行截圖如下: 虛擬碼如下: void Init() { //設定當前矩陣 glMatrixMode(GL_PROJECTION);

eigen C++模板矩陣

一個不用安裝即可使用的C++矩陣計算庫 官網: API documentation for eigen3 API documentation for eigen2 官網下載原始碼後直接將原始碼目錄新增到編譯器包含目錄即可使用。

C++淺談及Codeblocks的安裝使用

C++淺談 C++簡史 C++是基於C語言的擴充套件,C++可以執行所有的C語言程式,同時又在C語言的基礎上加入了許多更強大的功能。 C++特點 1 繼承和派生 2 多型性 3 封裝性 4 過載性 5 可面向物件 C++編譯環境 個人比較喜歡使

幾款C#開源的測試工具

 提供幾款.NET平臺下測試工具,好處大家試過就知道了NUnit        NUnit一款單元測試框架,它可以應用於遵循.NET框架標準的所有語言下。NUnit最初是從JUnit移植過來的。NUnit完全使用C#編寫且設計時考慮了多數.NET語言的特性,例如自定義屬性和其

Supervisor 守護程序的工具安裝使用

Supervisor 守護程序的工具安裝與使用 使用pip安裝 一般來說系統會預設安裝一個pip,安裝python3時預設也會安