数学建模社区-数学中国

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

作者: 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
我想是按列优先的好些3 z  _! I) \$ g2 W9 D6 G! O
whuteric 发表于 2010-10-5 16:22

0 p8 w$ w" Y$ s- f$ {# g* `为什么呢?
" k3 i& E7 Y0 }1 Z0 r
$ t2 p  ^5 H! ^; Z
作者: forcal    时间: 2010-10-5 19:47
就象男的和女的一样,哪种好呢?
) D5 q6 Z  z8 l/ Zmaster_math 发表于 2010-10-5 18:27

8 J6 Y& u. s8 S, p0 g您的意思是按列优先和按行优先是一样的,只是习惯而已?
+ ?1 Z: M$ \$ v- }- m6 N/ `# ]
; I; N: w6 x  W: D$ y1 Y& q4 l
作者: forcal    时间: 2010-10-7 10:15
以下是一个区别:# f6 c9 ^3 l( K+ `! j# s" ]

5 ]- s0 I; ?! }4 C* x例如一个矩阵,如果按列存储,则计算列向量的和就比较方便;如果按行存储,计算行向量的和则比较方便。
- A( `! q- H2 ~- q7 a+ z
- j# p. x- `6 X" ]) o( |) q1 kForcal按行优先存储,代码:
0 i# e3 j( w' ^& g$ T
  1. !using["math","sys"];& j( ~1 ]! _$ u4 a: t$ f
  2. mvar:
    - |1 p5 ?* B, w' U2 ?
  3. oo{p=rand[5000,5000]},
    ; r# G- D' y8 M& E
  4. t0=clock()," r4 o- X2 t5 c0 b
  5. oo{Sum[p,1]},
    ( V3 C/ C3 ^; n" h& Y
  6. printff{"\r\n按列求和时间: {1,r}",[clock()-t0]/1000},+ ~! e+ O8 {+ J* l: ~5 n
  7. t0=clock(),
    . C$ F, j3 s6 {. j
  8. oo{Sum[p,2]},
    2 x- {; I$ c; e' u8 ~6 @
  9. printff{"\r\n按行求和时间: {1,r}",[clock()-t0]/1000}
    7 R" O$ i  Q! K" u; f$ r
复制代码
结果:
$ c& ~2 Y) p, e8 s/ w按列求和时间: 0.375& x$ _( I6 }6 Y# R! q3 v
按行求和时间: 4.7e-002
: ?. V8 J; U' ]( {% q* P) V) \4 @* S$ {2 D) c! }$ \
matlab中sum(A,1)和sum(A,2)的效率似乎不一样吧?8 o6 L: F& t) Y5 I( n  j

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




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