列優先與行優先

2021-07-07 11:08:47 字數 859 閱讀 9630

對於乙個矩陣,在記憶體中有兩種儲存順序:(下面圖和**摘自 

對於下面的矩陣:

可以有兩種儲存方式:左為列優先,右為行優先。

column-major order

e.g., fortran

address

coordinates

value

0[1,1]111

[2,1]212

[1,2]123

[2,2]224

[1,3]135

[2,3]23

row-major order

e.g., c

address

coordinates

value

0[1,1]111

[1,2]122

[1,3]133

[2,1]214

[2,2]225

[2,3]23

顧名思義,列優先:優先按列儲存,先存完第一列再存第二列,行優先同理。

c/c++中矩陣的儲存為行優先,但matlab中是列優先準則,在不同語言間讀取資料時需要注意這點,同時在寫matlab時要盡量取乙個二維陣列的列,而不是行。

擴充套件到n維矩陣,列優先意味著儲存時第乙個維度先變化,即儲存順序為(0,0,0,...)、(1,0,0,...)、(max,0,0,...)、(0,1,0,...)、(1,1,0,...),

行優先意味著最後乙個維度先變化。

p.s:在處理資料時,說明資料的順序需要表明1)維度安排和 2)是否是行\列優先,這兩個資訊缺一不可。

p.s:caffe的blob、numpy的array、opencv的mat都是和c語言一樣,是行優先的。

p.s:貌似只有matlab中的矩陣是列優先。

列優先與行優先

初用matlab與c c 混合程式設計的人,對於列優先和行優先有一些生疏。看了wiki,發現 行優先和列優先指的是行優先儲存和列優先儲存。wiki的解釋 以乙個定義為為 m的3x3矩陣為例 列優先儲存 指的是matlab先儲存第一列的3個元素,然後儲存第二列的,最後儲存第三列的元素,從而這9個矩陣元...

矩陣基礎 1 行優先和列優先的問題

原 2016年08月18日 18 37 00 林微 摘要本文主要 的是 行優先 原則和 列優先 原則的問題。1.背景 首先了解 行優先 和 列優先 的知識,這兩種方式在數學上的直觀描述如下,給定如下矩陣 根據行優先的原則,其排序方式為 根據列優先的原則,其排序方式為 2.計算機領域的應用 行列優先原...

Eigen Matrix中的行優先,列優先問題

eigen matrix預設是行優先,因此在做資料傳遞時要特別謹慎.特別是,c 中的資料傳遞到eigen中時,要指定行優先,才不至於出問題 eigen map col x2 arr 另外,eigen矩陣中,行優先和列優先的矩陣相互轉換時,只是將資料的儲存方式進行的轉變,但是輸出某個行列上的資料是不會...