数学建模社区-数学中国

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

作者: 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
我想是按列优先的好些
/ c" a" C; m) o0 `7 Q7 r, \6 t8 J, Xwhuteric 发表于 2010-10-5 16:22
4 \7 E8 n3 S* a, X- \8 Z( m3 v
为什么呢?, C1 _+ G  N( a* D

! x) _6 o; @+ ]4 B& }
作者: forcal    时间: 2010-10-5 19:47
就象男的和女的一样,哪种好呢?
2 p/ w6 X$ I1 R8 n# N$ G6 y1 l6 Y" cmaster_math 发表于 2010-10-5 18:27

! z* q5 r: @' S4 Y( m( C) k您的意思是按列优先和按行优先是一样的,只是习惯而已?6 ~2 Y$ [; F3 E
& `( i4 ~  `9 W2 J+ @3 R

作者: forcal    时间: 2010-10-7 10:15
以下是一个区别:9 \& m) u( [$ q! _8 }& n6 a0 [4 P9 U
) |9 i8 P: u6 p' |) t
例如一个矩阵,如果按列存储,则计算列向量的和就比较方便;如果按行存储,计算行向量的和则比较方便。0 W$ s% d/ B6 q6 T

! h2 j$ f* C: I% w' A2 tForcal按行优先存储,代码:+ J7 M8 V7 z9 A& }  z
  1. !using["math","sys"];9 j6 ]6 t# R8 g/ [4 o) i& j/ k
  2. mvar:
    " ]& ~& I5 d0 S/ z; X3 k
  3. oo{p=rand[5000,5000]},+ R& E  m8 H+ j8 P
  4. t0=clock(),5 L9 s+ u, Y8 m* q+ V  \
  5. oo{Sum[p,1]},
    3 {4 K3 h; g, R( h  ?+ }
  6. printff{"\r\n按列求和时间: {1,r}",[clock()-t0]/1000},  V" M2 k% I, Q& T
  7. t0=clock(),3 ~# r/ f5 m$ P2 |3 |9 S4 g
  8. oo{Sum[p,2]},
    9 I2 S; u* M' V. p, {3 F
  9. printff{"\r\n按行求和时间: {1,r}",[clock()-t0]/1000}1 Q& @  {7 c; y: a4 m: \. H' p
复制代码
结果:! F% t, ~  `  _0 `/ @! J
按列求和时间: 0.375: \2 |8 D/ V* m1 ]4 M& ]
按行求和时间: 4.7e-002
7 |" J( x0 i" l* Y% X8 d' l
, I; F# y7 x( C6 X! }matlab中sum(A,1)和sum(A,2)的效率似乎不一样吧?$ r; S" T& B, S% q) _

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




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