数学建模社区-数学中国

标题: 关于数组存储方式 [打印本页]

作者: forcal    时间: 2010-10-5 09:15
标题: 关于数组存储方式
数组存储方式有按行顺序存储和按列顺序存储两种,Fortran、matlab是按列优先的,而C/C++、Pascal等是按行优先的,哪一种更好呢?
作者: qbist    时间: 2010-10-5 09:52
啊!~~~存储结构??!!~~
作者: zhwqqiangge    时间: 2010-10-5 10:16
??????????
作者: whuteric    时间: 2010-10-5 16:22
我想是按列优先的好些
作者: master_math    时间: 2010-10-5 18:27
就象男的和女的一样,哪种好呢?
作者: forcal    时间: 2010-10-5 19:45
我想是按列优先的好些( h/ ]8 L6 K- D2 A3 h; S  R* P
whuteric 发表于 2010-10-5 16:22

2 w0 }4 K* q; o5 z6 T为什么呢?
4 G7 o: e3 D8 D; O3 R  g
. Q& Y2 Z8 \" ]* `/ N  V1 F+ [3 ~* L
作者: forcal    时间: 2010-10-5 19:47
就象男的和女的一样,哪种好呢?5 q, t" L+ S/ l6 a
master_math 发表于 2010-10-5 18:27

6 L% l7 g7 _- V( D( J您的意思是按列优先和按行优先是一样的,只是习惯而已?
% g( Y! y9 U2 t; @
7 }1 P9 M' @8 Z( F2 ^
作者: forcal    时间: 2010-10-7 10:15
以下是一个区别:
$ W$ Q: H; A: P" ]$ m. o3 m9 g! z) r. {
例如一个矩阵,如果按列存储,则计算列向量的和就比较方便;如果按行存储,计算行向量的和则比较方便。* J# R* ?) j1 w& j: s: f1 \7 S" J% e

* k- I  z8 b! C  U) lForcal按行优先存储,代码:
% i: Z8 k+ z$ R) a5 o" [1 N( v" M
  1. !using["math","sys"];
    7 j5 ]5 D$ u& w! g
  2. mvar:3 t- R& y0 \& }2 h' ?
  3. oo{p=rand[5000,5000]},
    ) d8 ^. M7 r- h2 @/ _" t+ c
  4. t0=clock(),( O6 l! v0 Q* b; |9 O7 b6 Z2 C
  5. oo{Sum[p,1]},
    4 c' r( p1 u" g4 u
  6. printff{"\r\n按列求和时间: {1,r}",[clock()-t0]/1000},
    ( O3 X, _0 p$ d& ~* o/ U2 ?4 S
  7. t0=clock(),
    0 [; G  C# e" f4 f
  8. oo{Sum[p,2]},5 o1 t3 G: e+ m! b" ?* K$ D* X
  9. printff{"\r\n按行求和时间: {1,r}",[clock()-t0]/1000}$ H$ m7 t. h6 b0 e, B0 d% r
复制代码
结果:2 ~- ]6 L& M9 x+ s+ B, d  J
按列求和时间: 0.375( a/ l+ j2 n9 r' ^8 U
按行求和时间: 4.7e-002# C+ u) `4 |7 T( V8 c
0 C' E. r( c" [; h
matlab中sum(A,1)和sum(A,2)的效率似乎不一样吧?/ u0 _" ?, s; P

作者: okdjl    时间: 2011-12-17 11:53
大家有什么好看法,赶快说说




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5