matlab多维矩阵在内存中存储顺序

来源:互联网 发布:查看远程端口是否打开 编辑:程序博客网 时间:2024/04/29 14:50

         Matlab多维矩阵在内存中存储顺序是按照从前到后每列每列顺序存储的,当第一个维度数据存满后,第二个维度数据增加一,依次类推,在涉及到高维(至少三维)矩阵时,了解到数据的存储顺序对于索引数值来说有很大用处。

(1)二维数组

     按上述说的,二维数组的存储方式也是先列后行。比如生成5*5的矩阵如下:

 for i=1:5

    for j=1:5

            aa(i,j)=rand();

    end

end

得到:

aa =

 

    0.3998    0.2599    0.8001    0.4314    0.9106

    0.1818    0.2638    0.1455    0.1361    0.8693

    0.5797    0.5499    0.1450    0.8530    0.6221

    0.3510    0.5132    0.4018    0.0760    0.2399

0.1233    0.1839    0.2400    0.4173    0.0497

明显总共有25个数据,那么内存中的顺序就为先第一列值,接着第二列值,等等。当索引时,aa(1) = 0.3998aa(10) = 0.1839(注意不是0.8693,)0.8693应该是aa(22)

(2)三维数组

二维数组相对简单,当维数高于3以后,就相对复杂了。比如还是生成随机三维矩阵如下:

for i=1:5

    for j=1:5

        for k=1:5

            ss(i,j,k)=rand();

        end

    end

end

得到:

ss(:,:,1) =

    0.9027    0.9001    0.2417    0.9561    0.8212

    0.7317    0.7447    0.6256    0.4868    0.5108

    0.8116    0.5502    0.4709    0.1707    0.4302

    0.1111    0.6028    0.3188    0.8010    0.5785

    0.5211    0.3955    0.9133    0.6797    0.4942

ss(:,:,2) =

    0.9448    0.3692    0.4039    0.5752    0.0154

    0.6477    0.1890    0.7802    0.4359    0.8176

    0.5328    0.6225    0.2305    0.2277    0.1848

    0.2581    0.7112    0.4242    0.0292    0.2373

    0.2316    0.3674    0.7962    0.1366    0.7791

ss(:,:,3) =

    0.4909    0.1112    0.0965    0.0598    0.0430

    0.4509    0.6868    0.0811    0.4468    0.7948

    0.3507    0.5870    0.8443    0.4357    0.9049

    0.4087    0.2217    0.5079    0.9289    0.4588

    0.4889    0.9880    0.0987    0.7212    0.7150

ss(:,:,4) =

    0.4893    0.7803    0.1320    0.2348    0.1690

    0.5470    0.1835    0.9294    0.3063    0.6443

    0.9390    0.2077    0.1948    0.3111    0.9797

    0.5949    0.1174    0.0855    0.7303    0.9631

    0.6241    0.0377    0.2619    0.1068    0.9037

ss(:,:,5) =

    0.3377    0.3897    0.9421    0.3532    0.6491

    0.2963    0.3685    0.7757    0.5085    0.3786

    0.8759    0.3012    0.2259    0.9234    0.4389

    0.2622    0.2967    0.2625    0.4886    0.5468

    0.6791    0.8852    0.3354    0.6538    0.8909

好了,那么存储的顺序是什么样子的呢,还是那样,假设一般维数矩阵为

(i,j,k,m,n...)的时候,都是先前面的排列,排满了接着再往后面排,这样就是先排i=1:5的值,j=k=1,排完j加1,再排i=1:5,等等。这样排列的数据就为:

    0.9027     

    0.7317    

    0.8116     

    0.1111    

    0.5211     

    0.9001    

    0.7447   

    0.5502    

0.6028    

    0.3955    

    0.2417    

    0.6256    

    0.4709    

    0.3188    

    0.6797   

..........

检验一下,总共数据125个吧,那么试试ss(10) = 0.3955,去对应一下位置看看,ss(100) =  0.9037,再去对应一下位置看看,ok,差不多就是这么排的。

在高维的矩阵一次类推了,先前面的排,排完往后面进位后继续排,了解了排列的顺序,在涉及到高维索引数据时很有用的。

 

0 0
原创粉丝点击