矩陣的行序和列序儲存

2021-04-30 09:07:17 字數 965 閱讀 4887

在圖形處理中,矩陣操作時最基本的操作,但是不同的系統中對矩陣的儲存是不同,比如opengl和cg中就是不一樣的:

比如乙個4x4矩陣[m11,m12,m13,m14

m21,m22,m23,m24

m31,m32,m33,m34

m41,m42,m43,m44],

在實現中通常將其儲存為乙個一維的線性陣列如float matrix或者float* matrix。

在opengl中這個matrix中資料的順序是先遍歷列的,線性儲存為,這被稱為矩陣的列序(column-major)儲存,我們使用glgetfloatv(gl_modelview_matrix,...)等得到的儲存矩陣的陣列都是按照這樣的順序儲存矩陣的。

但是在cg中這個matrix的儲存順序確實先遍歷行的,也就是儲存為,稱為行序(row-major)儲存,可能多數人認為這種儲存順序更「自然」,(其實我也這麼覺得),這種儲存方式也被稱為是c-style的,好像是大多數系統裡是按照行序儲存矩陣的。

不同的系統對矩陣的儲存方式不一樣,如果在程式中綜合使用了不同的框架,就要注意進行統一了,比如你在opengl 中使用了cg指令碼的時候,例如乙個cg程式void programm(uniform float4x4 modelviewmatrix,... ...)要求你從程式中傳入乙個modelview矩陣,我們在程式中使用opengl的glgetfloatv()函式得到了float* glmatrix 為這個modelview矩陣,但是這個glmatrix確不能直接賦給modelviewmatrix供cg使用,因為cg在解析這個glmatrix 會把它解析為行序的,我們可以在讓modelviewmatrix得到glmatrix 後,呼叫transfor()將modelviewmatrix做乙個轉置,modelviewmatrix就變成cg所能正確解析的行序的了。

行序和列序的轉換其實就是乙個矩陣的轉置關係,雖然這個變換很簡單,但是在使用不同的框架時,要記得先注意一下這個系統式採用哪種方式儲存矩陣的,才不會犯錯。

Excel的行或列資料倒序排列

一 行倒序 比如要把第一行的資料 倒過來 排列 a b c d e 1 thu pku fdu sjtu zju 變成a b c d e 2 zju sjtu fdu pku thu 把公式填寫在另一行的第一列 indirect address 1,counta 1 1 column 1 然後向右填...

行儲存和列儲存的區別

列儲存不同於傳統的關係型資料庫,其資料在表中是按行儲存的,列方式所帶來的重要好處之一就是,由於查詢中的選擇規則是通過列來定義的,因此整個資料庫是自動索引化的。按列儲存每個欄位的資料聚集儲存,在查詢只需要少數幾個欄位的時候,能大大減少讀取的資料量,乙個欄位的資料聚集儲存,那就更容易為這種聚集儲存設計更...

行儲存和列儲存的區別

一 對比行儲存和列儲存的區別前,我們先來聊下背景。假設我們用mysql做了乙個商品訂單庫order,如下 orderid name kind price kgtime1豬肉 肉類50 2.02020.01.012牛肉 肉類60 1.02020.01.013白菜 蔬菜61.02020.01.01 二 ...