對於乙個矩陣,在記憶體中有兩種儲存順序:(下面圖和**摘自
對於下面的矩陣:
可以有兩種儲存方式:左為列優先,右為行優先。
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矩陣中,行優先和列優先的矩陣相互轉換時,只是將資料的儲存方式進行的轉變,但是輸出某個行列上的資料是不會...