行列優先儲存與迴圈

2021-06-23 03:52:54 字數 903 閱讀 9351

對於乙個二維陣列a[m][n],在計算機記憶體中有兩種儲存方式:行優先儲存和列優先儲存。

行優先儲存,顧名思義,就是一行的資料存放在一起,然後逐行存放。列優先儲存,就是每一列的資料是儲存在一起的,一列一列地存放在記憶體中。這兩種儲存方法,對於編寫遍歷二維矩陣的迴圈語句,還是有一定影響的。比如,如果是按行優先儲存的,那麼在遍歷時,一行一行的讀取資料,肯定比一列一列地讀取整個陣列,要方便許多。

下面以兩段程式來說明問題。

這是c++**。

#include#includeusing namespace std;

int main()

} --m;

} end = clock();

cout<<"case 1 time is: "<

case 1 time is: 4

case 2 time is: 5

請按任意鍵繼續. . .

下面是matlab**:

a(100,1000)=0;

tic;

for m=1:20

for i=1:100

for j=1:1000

a(i,j)=1;

endend

endtime=toc

tic;

for m=1:20

for i=1:1000

for j=1:100

a(j,i)=1;

endend

endtime=toc

在本人機器上的結果如下:

time =

0.0160

time =

0.0120

由上面的例子我們可以看出,c,c++中是行優先儲存的,以第一種迴圈的方式,效率比較高。在matlab中,是列優先儲存的,以第二種方式的執行效率高。

陣列 按行,列儲存

二維陣列 二維陣列amn可視為由m個行向量組成的向量,或由n個列向量組成的向量。陣列的順序儲存方式 由於計算機記憶體是一維的,多維陣列的元素應排成線性序列後存人儲存器。陣列一般不做插入和刪除操作,即結構中元素個數和元素間關係不變化。一般採用順序儲存方法表示陣列。1 行優先順序 將陣列元素按行向量排列...

Mysql儲存過程 行列轉換

在網上找了些資料,自己動手寫了個行列轉換的儲存過程。下面片段為表結構 create table changeprice id bigint 20 not null auto increment,sid bigint 20 not null,datecreated date not null defa...

python之序列 列表 迴圈巢狀

insert extend list1 1,2,3,4,5,6 list2 a b c d list3 1,chengdu list2 list1 tom jack chengdu shanghai list2 1,2,3,4,5,6,7 print list1 0 print list2 0 4 ...