




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、C+矩陣處理庫-Eigen初步使用(轉(zhuǎn)載自:CSDNcyxcwl的博客)2013-07-1621:20:43|分類:計算機視覺|舉報|字號訂閱項目要進行比較多的矩陣操作,特別是二維矩陣。剛開始做實驗時,使用了動態(tài)二維數(shù)組,于是寫了一堆Matrix函數(shù),作矩陣的乘除加減求逆求行列式。實驗做完了,開始做代碼優(yōu)化,發(fā)現(xiàn)Matrix.h文件里適用性太低,而且動態(tài)二維數(shù)組的空間分配與釋放也影響效率,于是尋找其他解決方案。首先考慮的是與Matlab混合編程,折騰了半天把Matlab環(huán)境與VS2010環(huán)境之后,發(fā)現(xiàn)Matlab編譯出來的函數(shù)使用起來也比較麻煩,要把數(shù)組轉(zhuǎn)化成該函數(shù)適用的類型后才能使用這些函數(shù)
2、。我的二維數(shù)組也不是上千萬維的,估計這個轉(zhuǎn)化的功夫就犧牲了一部分效率了。(如果誰有混合編程的心得,求幫忙,冏。)接著想到使用一維數(shù)組的方法,或者把一維數(shù)組封裝在一個類里邊。想著又要寫一堆矩陣操作函數(shù)頭就大,索性谷歌了一下矩陣處理庫,除了自己之前知道的OpenCV庫(之前由于轉(zhuǎn)化cvarr麻煩,于是放棄),還有Eigen,Armadillo。http:效率做了一個簡單的評測,OpenCV庫的矩陣操作效率是最低的,還好我沒使用。Eigen速度最快,與自己定義數(shù)組的操作效率相當(dāng)(-,才相當(dāng)嗎?我本來還想找個更快的呢)。于是選擇使用Eigen。進入正題。安裝:http:eigen.tuxfamily.
3、org/index.php?title=Main_Page這里杲官網(wǎng),直接把包下載下來,不大,也就幾M,我是直接放在自己項目文件夾(考慮項目封裝時,這樣比較方便),放在VS2010<INCLUDE>文件夾。簡單使用:看了一下官方文檔,Eigen庫除了能實現(xiàn)各種矩陣操作外,貌似還提供數(shù)學(xué)分析中的各種矩陣操作(包括L矩陣U矩陣)。目前我使用到的還是簡單的矩陣操作,如加減乘除,求行列式,轉(zhuǎn)置,逆,這些基本操作只要:cppviewplaincopyprint?1. #include"Eigen/Eigen"2. usingnamespaceEigen;就能實現(xiàn),別忘了名
4、空間Eigen。包含的類型:MatricesArraysArray<float,Dynamic,Dynamic><=>ArrayXXfArray<double,Dynamic,1><=>ArrayXdArray<int,1,Dynamic><=>RowArrayXiArray<float,3,3><=>Array33fArray<float,4,1><=>Array4fMatrix<float,Dynamic,Dynamic><=>MatrixXfMa
5、trix<double,Dynamic,1><=>VectorXdMatrix<int,1,Dynamic><=>RowVectorXiMatrix<float,3,3><=>Matrix3fMatrix<float,4,1><=>Vector4f如上表,主要包括兩種類型,Matrices與Arryays,接著是這兩種類型的派生類型?,F(xiàn)在我用到的是Matrices(我不明白這兩種類型在效率間有什么差距,冏。),其中Matrix代表二維矩陣,Vector代表列向量RowVector代表行向量。如果后面
6、跟著X,則代表是動態(tài)的數(shù)組,運行時可以根據(jù)需求改變,如果是數(shù)字,則代表是靜態(tài)的(根據(jù)實驗,最多能建立4維的靜態(tài)矩陣或者數(shù)組,-,為嘛不是6維,實驗正好需要)。i代表int類型,f代表float類型,d代表double。對應(yīng)關(guān)系:Matrix二維矩陣Vector列向量RowVector行向量X動態(tài)固定數(shù)字n靜態(tài),4>=n>=1iintffloatddoubleArrays類型的話也跟Matrices差不多。基本操作,定義,初始化,矩陣操作:cppviewplaincopyprint?1. #include<iostream>2. #include"Eigen/E
7、igen”3. usingnamespacestd;4. usingnamespaceEigen;5.6. voidfoo(MatrixXf&m)7. 8. Matrix3fm2=Matrix3f:Zero(3,3);9. m2(0,0)=1;10. m=m2;11. 12. intmain()13. 14. /*定義,定義時默認(rèn)沒有初始化,必須自己初始化*/15. MatrixXfm1(3,4);/動態(tài)矩陣,建立3行4歹限16. MatrixXfm2(4,3);/4行3列,依此類推。17. MatrixXfm3(3,3);18. Vector3fv1;/若是靜態(tài)數(shù)組,則不用指定行或者
8、列19. /*初始化*/20. m1=MatrixXf:Zero(3,4);/用0矩陣初始化,要指定行列數(shù)21. m2=MatrixXf:Zero(4,3);22. m3=MatrixXf:Identity(3,3);/用單位矩陣初始化23. v1=Vector3f:Zero();/同理,若是靜態(tài)的,不用指定行列數(shù)24.25. m1<<1,0,0,1,也可以以這種方式初始化26. 1,5,0,1,28. m2<<1,0,0,29. 0,4,0,30. 0,0,7,31. 1,1,1;32.33. /*元素的訪問*/34. v11=1;35. m3(2,2)=7;36.
9、cout<<"v1:n"<<v1<<endl;37. cout<<"m3:n"<<m3<<endl;38. /*復(fù)制操作*/39. VectorXfv2=v1;/復(fù)制后,行數(shù)與列數(shù)和右邊的v1相等,matrix也是一樣,40. /也可以通過這種方式重置動態(tài)數(shù)組的行數(shù)與列數(shù)41. cout<<"v2:n"<<v2<<endl;42.43. /*矩陣操作,可以實現(xiàn)+-*/操作,同樣可以實現(xiàn)連續(xù)操作(但是維數(shù)必須符合情況),44. 如
10、m1,m2,m3維數(shù)相同,則可以m1=m2+m3+m1;*/45. m3=m1*m2;46. v2+=v1;47. cout<<"m3:n"<<m3<<endl;48. cout<<"v2:n"<<v2<<endl;49. /m3=m3.transpose();這句出現(xiàn)錯誤,估計不能給自己賦值50. cout<<"m3轉(zhuǎn)置:n"<<m3.transpose()<<endl;51. cout<<"m3行歹!J
11、式:n"<<m3.determinant()<<endl;52. m3=m3.reverse();53. cout<<"m3求逆:n"<<m3<<endl;54.55. system("pause");56.57. return0;58. 輸出:htmlviewplaincopyprint?1. v1:2. 03. 14. 05. m3:6. 1007. 0108. 0079. v2:10. 011. 112. 013. m3:14. 21115. 221116. 116417. v2
12、:18. 019. 220. 021. m3轉(zhuǎn)置:22. 22123. 121124. 116425. m3行列式:26. 254027. m3求逆:28. 641129. 1211基本的操作就是以上這些,有了這個庫,以后就不用做重復(fù)工作了!C+矩陣處理工具Eigen分類:C/C+MATLABLinux&MAC2012-07-2420:3718047人閱讀評論(32)收藏舉報工具c+matrixrandominitializationmatlab最近和一些朋友討論到了C+中數(shù)學(xué)工具的問題,以前總是很2地自己寫矩陣運算,或者有時候在matlab里計算了一些數(shù)據(jù)再往C程序里倒,唉想想那些年
13、,我們白寫的代碼啊人家早已封裝好了!首先推薦幾個可以在C+中調(diào)用的數(shù)學(xué)平臺:eigen、bias、lapack、svd、CMatrix,本文著重eigen做以講解,希望對各位有所幫助。下面是本文主線,主要圍繞下面幾點進行講解:*Eigen是什么?Eigen3哪里下載?Eigen3的配置Eigen3樣例代碼有沒有?去哪里更深入學(xué)習(xí)?*Eigen是什么?Eigen是C+中可以用來調(diào)用并進行矩陣計算的一個庫,里面封裝了一些類,需要的頭文件和功能如下:ModulesandHeaderfilesTheEigenhbraryisdividedinaCoremoduleandseveraladdibonal
14、modules.Eachmodulehasacorrespondingheaderfilewhichhastobeincludedinordertousethemodule.TheJenieandEigenheadefriesare口OMidedt。convenientlygainaccesstoseveralmodulesatonce.ModuleCoreGeometryLUChoieskYHouseholderSVDQREigenvaluesSparseHeaderfileContentsii.,i,巴MatrixandArrayd日兆守的b己witline己1ralgebra(inclu
15、dingtrimngulwandseifadjcintproducts)rarraymanipulation機處配立LGTranstormTranslation,叼行呷ftotion2Dand3Drotations(Quaternion,AngleAxis)#LILcluda&ssn/Lu>Inverse,determinant,LUdecompositronswithsolvern-(FullPivLUPartialPivLU)板足通LLTandLDLTCh。悟skyfactorationwithsolver粒EM<Ei/n/iUxhoi&QHouseholder
16、transformations;thismoduleisusedbysevelinearalgebramodules於neiud電<EigMi/svn>5V口decompositionwithleast-squaressolverCJacobiSVD)機X”心<E1e6n/0B>QRdcomposihonwithsolver(HouseholderQR,ColPiuHou&eficlderQRrFuHPivHouseholdsrQk)# 皿I2®鴕Eigenvalue,eigenvertordecomposrtionsCEigenSolverSeifA
17、ojotntEigenS-olverComplexEig&nSolver)# LIlciudt儂*n/班虹GS口日強matrixstoogeandrelatedbareg北日(Spiir5eNntnx,DvnamkSDarseMatrix/Spar5eVector)# Uclude®即n/mnsGdeludesUdgGam改MLUChomsky,QRantiEigenvaiuesheaderfiles版iLuiude<Ei中南上:變QIncludesDenseandSparseheaderfiles(thewholeEigenlibrary)Eigen的主頁上有一些更詳
18、細的日gen介紹。Eigen3哪里下載?這里是我下好的,這里是官網(wǎng)主頁,請自行下載,是個code包,不用安裝。Eigen的配置逋用屬性一直置晨性簟規(guī)jC/C+嬴京姓理器代隹生成逅言七要澤頭批出文件窗疑信息高級清單工具XML立檔生成號湖顯信息訊芻定父生成聲要配置浩朗(Mbug)-平白網(wǎng)活副CWin算配意附加包含目錄D:PragramFilecXcigenS解析仙Jng弓|用調(diào)近信息惜式用于“編銅井彼續(xù)”的程序激據(jù)庫(/ZD酬香盤不啟動版校標(biāo)志是t/rtolog&)警告箸盟3圾(/W3J檢源64拉可移植性問嶷舌將警與艮為錯送香慢吊UNICODEm立交1?;矢郊影夸浿甘莊或寥個登添加至唯
19、序窗佞由的目錄;號目錄不止一W,請用分號分隔.I直接上圖了,附加包含目錄那里填上你放日gen文件夾的位置即可。Eigen的樣例代碼有沒有?當(dāng)然有,這篇文章重點就是這里!以下是我整理的一些常用操作,基本的矩陣運算就在下面了,算是個入門吧主要分以下幾部分:建議大家放到編譯環(huán)境里去看,因為我這里有一些region的東西,編譯器下更方便看cppviewplaincopy1. #include<iostream>2. #include<Eigen/Dense>3.4./usingEigen:MatrixXd;5.usingnamespaceEigen;6.usingnamespa
20、ceEigen:internal;7.8.usingnamespaceEigen:Architecture;9.10.usingnamespacestd;11.12. intmain()13. 14.15. #pragmaregionone_d_object2.23.24.cout<<II*1D-objectVector4dv1;v1<<1,2,3,4;cout<<"v1=n"<<v1<<endl;VectorXdv2(3);v2<<1,2,3;*“<<
21、endl;25. cout<<"v2=n"<<v2<<endl;26.27. Array4iv3;28. v3<<1,2,3,4;29. cout<<"v3=n"<<v3<<endl;30.31. ArrayXfv4(3);32. v4<<1,2,3;33. cout<<"v4=n"<<v4<<endl;34.35. #pragmaendregion36.37. #pragmaregiontwo_d_ob
22、ject1.42.43.cout<<II*/2Dobjects:MatrixXdm(2,2);/method1*2D-object*“<<endl;44. m(0,0)=3;45. m(1,0)=2.5;46. m(0,1)=-1;47. m(1,1)=m(1,0)+m(0,1);48.49. /method250. m<<3,-1,51. 2.5,-1.5;52. cout<<"m=n"<<m<<endl;54. #pragmaendregion55.56. #pragmaregi
23、onComma_initializer57.58. cout<<59.60. int61. int“*Initialization*"rows=5;cols=5;<<endl;62. MatrixXfm1(rows,cols);63. m1<<(Matrix3f()<<1,2,3,4,5,6,7,8,9).finished(),64. MatrixXf:Zero(3,cols-3),65. MatrixXf:Zero(rows-3,3),66. MatrixXf:Identity(rows-3,cols-3);67. cout<&
24、lt;"m1=n"<<m1<<endl;69.#pragmaendregion70.71. #pragmaregionRuntime_info72.73.cout<<II*RuntimeInfo*“<<endl;74.75. MatrixXfm2(5,4);76. m2<<MatrixXf:Identity(5,4);77. cout<<"m2=n"<<m2<<endl;78.79. MatrixXfm3;80. m3=m1*m2;4.co
25、ut<<"m3.rows()="<<m3.rows()<<""<<"m3.cols()="<<m3.cols()<<endl;cout<<"m3=n"<<m3<<endl;85.86. #pragmaendregion87.88. #pragmaregionResizing89.90.cout<<II*Resizing*”<<endl;91.92. /1D-resize93. v1.r
26、esize(4);94. cout<<"Recoverv1to4*1array:v1=n"<<v1<<endl;95.96. /2D-resize97. m.resize(2,3);98. m.resize(Eigen:NoChange,3);99. m.resizeLike(m2);100. m.resize(2,2);101.102. #pragmaendregion103.104. #pragmaregionCoeff_access105.106.cout<<,*Coefficientaccess*”<<en
27、dl;107.108. floattx=v1(1);109. tx=m1(1,1);110. cout<<endl;111.112. #pragmaendregion113.114.#pragmaregionPredefined_matrix115.116.cout<<"*PredefinedMatrix*"<<endl;117.118./1D-object119.typedefMatrix3fFixedXD;120.FixedXDx;121.122.x=FixedXD:Zero();123.x=FixedXD:Ones();124.x=
28、FixedXD:Constant(tx);/txisthevalue125.x=FixedXD:Random();126.cout<<"x=n"<<x<<endl;127.128.typedefArrayXfDynamic1D;129./或者typedefVectorXfDynamic1D130.intsize=3;131.Dynamic1Dxx;132.xx=Dynamic1D:Zero(size);133.xx=Dynamic1D:Ones(size);134.xx=Dynamic1D:Constant(size,tx);135.xx
29、=Dynamic1D:Random(size);136.cout<<"xx=n"<<x<<endl;137.138./2D-object139.typedefMatrixXfDynamic2D;140.Dynamic2Dy;141.y=Dynamic2D:Zero(rows,cols);142.y=Dynamic2D:Ones(rows,cols);143.y=Dynamic2D:Constant(rows,cols,tx);/txisthevalue144.y=Dynamic2D:Random(rows,cols);145.146.#pragma
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛南衛(wèi)生健康職業(yè)學(xué)院《商務(wù)智能》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧財貿(mào)學(xué)院《行政案例研討》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年山東省百校大聯(lián)考高三上學(xué)期12月月考歷史試卷
- 吉林工業(yè)職業(yè)技術(shù)學(xué)院《媒介文化》2023-2024學(xué)年第二學(xué)期期末試卷
- 上??萍即髮W(xué)《航海學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 欽州幼兒師范高等??茖W(xué)?!毒频攴?wù)營銷》2023-2024學(xué)年第二學(xué)期期末試卷
- 黃淮學(xué)院《地理學(xué)基本問題》2023-2024學(xué)年第二學(xué)期期末試卷
- 福建衛(wèi)生職業(yè)技術(shù)學(xué)院《小學(xué)文學(xué)與媒體教育》2023-2024學(xué)年第二學(xué)期期末試卷
- 集寧師范學(xué)院《跨境電子商務(wù)實務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江工業(yè)大學(xué)之江學(xué)院《管理心理學(xué)D1》2023-2024學(xué)年第二學(xué)期期末試卷
- 化工原理傳質(zhì)導(dǎo)論
- 環(huán)境與可持續(xù)發(fā)展ppt課件(完整版)
- Linux操作系統(tǒng)課件(完整版)
- 跨境電商亞馬遜運營實務(wù)完整版ppt課件-整套課件-最全教學(xué)教程
- 中國傳媒大學(xué)《當(dāng)代電視播音主持教程》課件
- 浙美版小學(xué)六年級美術(shù)下冊全冊精品必備教學(xué)課件
- DB32∕T 4245-2022 城鎮(zhèn)供水廠生物活性炭失效判別和更換標(biāo)準(zhǔn)
- 建設(shè)工程圍擋標(biāo)準(zhǔn)化管理圖集(2022年版)
- 人教版七年級上冊歷史課程綱要
- 濕法冶金簡介
- 2022新教科版六年級科學(xué)下冊全一冊全部教案(共28節(jié))
評論
0/150
提交評論