eigen
是乙個輕量級的矩陣庫,除了稀疏矩陣不成熟(3.1有較大改進)以外,其他的矩陣和向量操作都比較完善,而且速度不錯.
不支援vc6.0,vs最低版本支援2003(打補丁),最好是2005以上.
在eigen 3.1.3
eigendemo.zip
示例是vs2010環境下的程式,主要的檔案就只有main.cpp和eigen資料夾。
#include #include "eigen/dense"using namespace eigen;
int main()
使用map函式,可以實現eigen的矩陣和c++中的陣列直接轉換,語法如下:
//@param matrixtype 矩陣型別//@param mapoptions 可選引數,指的是指標是否對齊,aligned, or unaligned. the default is unaligned.
//@param stridetype 可選引數,步長
/* map*/
int i;
//陣列轉矩陣
double
*amat = new double[20
];for(i =
0;i<
20;i++
)//靜態矩陣,編譯時確定維數 matrix
eigen:mapdouble,4
,5>
> stamat(amat)
;//輸出
for(
int i =
0; i < stamat.size()
; i++
) std::
cout
<<
*(stamat.data()
+ i)
<<
" ";
std::
cout
<< std::
endl
<< std::
endl
;//動態矩陣,執行時確定 matrixxd
map dymmat(amat,4,
5);//輸出,應該和上面一致
for(
int i =
0; i < dymmat.size()
; i++
) std::
cout
<<
*(dymmat.data()
+ i)
<<
" ";
std::
cout
<< std::
endl
<< std::
endl
;//matrix為列優先,如下返回指標
dymmat.data()
;
eigen過載了基礎的+ - * / += -= *= /= *可以表示標量和矩陣或者矩陣和矩陣
#include#include
using namespace eigen;
int main(
)*/
小矩陣(4 * 4及以下)eigen會自動優化,預設採用lu分解,效率不高
#include #include using namespace std;using namespace eigen;
int main()
#include除了colpivhouseholderqr、llt、ldlt,還有以下的函式可以求解線性方程組,請注意精度和速度: 解小矩陣(4*4)基本沒有速度差別#include
using namespace std;
using namespace eigen;
int main(
)
decomposition
method
矩陣特殊要求
速度精度
partialpivlu
partialpivlu()
可逆++
+fullpivlu
fullpivlu()
none
-+++
householderqr
householderqr()
none+++
colpivhouseholderqr
colpivhouseholderqr()
none+++
fullpivhouseholderqr
fullpivhouseholderqr()
none
-+++
lltllt()
正定+++
+ldlt
ldlt()
正或負半定 positive or negative semidefinite
+++++
最小二乘求解有兩種方式,jacobisvd或者colpivhouseholderqr,4*4以下的小矩陣速度沒有區別,jacobisvd可能更快,大矩陣最好用colpivhouseholderqr
#include#include
using namespace std;
using namespace eigen;
int main(
)
稀疏矩陣的標頭檔案包括:
#include #include #include #include初始化有兩種方式: 1.使用三元組插入
typedef eigen::2.直接將已知的非0值插入triplet
t;std::
vector
tripletlist;
triplets.reserve
(estimation_of_entries)
;//estimation_of_entries是預估的條目
for(...)
sparsematrixtype mat(rows,cols)
;mat.setfromtriplets
(tripletlist.begin()
, tripletlist.end()
);// mat is ready to go!
sparsematrix mat(rows,cols)稀疏矩陣支援大部分一元和二元運算:;mat.reserve
(vectorxi::
constant
(cols,6)
);for(...)
mat.makecompressed()
;// optional
sm1.real() sm1.imag() -sm1 0.5*sm1二元運算中,稀疏矩陣和普通矩陣可以混合使用sm1+sm2 sm1-sm2 sm1.cwiseproduct(sm2)
//dm表示普通矩陣也支援計算轉置矩陣和伴隨矩陣dm2 = sm1 + dm1;
Substring 的一些簡單用法
string teststring abc def teststring.substring 2 return c def teststring.substring teststring.lastindexof 1 return def teststring.substring teststring...
LINQ to SQL的一些簡單用法
static void main string args new person 新建乙個list,事先存放一些資料 var a personlist.firstordefault 獲取personlist中第一條資料 var b personlist.where p p.personid 2 fir...
python dict的一些簡單用法
我以為我dict用的很熟了,但是真正再去用的時候發現還是底子太薄,太多地方容易出錯了 d dict or 更簡單 d 這樣建立了乙個新的dict,不包含任何key,value if d.han key key do something.乙個例子 比如說我有乙個list,裡面有重複的元素,我要統計所有...