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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Eigen入门之密集矩阵 10 - 矩阵的行优先及列优先存储

發(fā)布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Eigen入门之密集矩阵 10 - 矩阵的行优先及列优先存储 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

本篇介紹Eigen中矩陣及二維數(shù)組的系數(shù)存儲順序–行優(yōu)先及列優(yōu)先,已經(jīng)如何指定優(yōu)先順序。

行優(yōu)先(row-majoe)、 列優(yōu)先(column-majoe)

矩陣的系數(shù)條目組成了一個二維的結(jié)構(gòu),在內(nèi)存內(nèi)存儲矩陣時,必須以某種結(jié)構(gòu)來布局。Eigen內(nèi)提供了2中布局方式: 行優(yōu)先、列優(yōu)先。

如有矩陣A,如下:
A=[822991443545]A = \begin{bmatrix} 8 & 2 & 2 & 9 \\ 9 & 1 & 4 & 4 \\ 3 & 5 & 4 & 5 \end{bmatrix} A=???893?215?244?945????

那么,以行優(yōu)先存儲時,其系數(shù)一行一行地,按照行順序。其系數(shù)在內(nèi)存中的順序如此:
8 2 2 9 9 1 4 4 3 5 4 5。

而以列優(yōu)先的情況下,其系數(shù)的順序則如此:
8 9 3 2 1 5 2 4 4 9 4 5

請看一下,并理解下面的示例,其使用PlainObjectBase::data()的data()函數(shù),來得到矩陣保存于內(nèi)存中的數(shù)據(jù)指針。

Matrix<int, 3, 4, ColMajor> Acolmajor; Acolmajor << 8, 2, 2, 9,9, 1, 4, 4,3, 5, 4, 5;cout << "The matrix A:" << endl; cout << Acolmajor << endl << endl; cout << "In memory (column-major):" << endl; for (int i = 0; i < Acolmajor.size(); i++)cout << *(Acolmajor.data() + i) << " ";cout << endl << endl;Matrix<int, 3, 4, RowMajor> Arowmajor = Acolmajor; cout << "In memory (row-major):" << endl;for (int i = 0; i < Arowmajor.size(); i++)cout << *(Arowmajor.data() + i) << " "; cout << endl;

執(zhí)行的結(jié)果:

The matrix A: 8 2 2 9 9 1 4 4 3 5 4 5In memory (column-major): 8 9 3 2 1 5 2 4 4 9 4 5 In memory (row-major): 8 2 2 9 9 1 4 4 3 5

Eigen中的存儲方式

一個矩陣或一個二維數(shù)組可以通過指定的模板參數(shù)選項來設(shè)置矩陣和數(shù)組的存儲模式/方式。就如矩陣類的說明所說,矩陣類模板有6個模板參數(shù),其中三個是強制性的(標量,RowsAtCompileTime和ColsAtCompileTime),另外三是可選的(Options選項,MaxRowsAtCompileTime和MaxColsAtCompileTime)。如果選項參數(shù)設(shè)置為RowMajor,那么矩陣或數(shù)組存儲采樣行優(yōu)先順序;如果設(shè)置為ColMajor,然后存儲在列為主的順序。

這種機制就用于為程序指定的矩陣的存儲順序。如果沒有指定存儲順序,那么就默認存儲條目采樣列優(yōu)先column-major。Eigen內(nèi)定義的簡化的typedef (Matrix3f ArrayXXd,等等)也是如此。
  
一個使用某種存儲順序的矩陣/數(shù)組可以使用賦值表達式,賦值給使用其他存儲順序矩陣/數(shù)組,如上面的示例的程序,在 Arowmajor初始化時,使用Acolmajor為其賦值。Eigen將自動重新排序所有的系數(shù)。更普遍的是,行和列為主的矩陣可以混合使用在一個表達式內(nèi)。

選擇哪種存儲模式?

在程序中,選擇哪種存儲模式,這依賴于我們自己的程序。

  • 如果你的程序還使用了其他的開發(fā)庫,而不是只有Eigen。我們需要考慮相互之間的匹配的問題。這時,我們在程序中使用統(tǒng)一的存儲順序,程序會更容易、更快地開發(fā)。
  • 如果算法要以行的方式操作,則程序采樣行優(yōu)先模式,會帶來更好地性能。同樣,采樣列優(yōu)先的模式,在需要訪問列的時候更適合。
  • Eigen缺省地采樣列優(yōu)先模式。自然地,大多數(shù)的開發(fā)和測試使用了列為主的矩陣。

總結(jié)

以上是生活随笔為你收集整理的Eigen入门之密集矩阵 10 - 矩阵的行优先及列优先存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。