数学建模社区-数学中国

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

作者: 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
我想是按列优先的好些
# t) ?+ B. A5 `whuteric 发表于 2010-10-5 16:22
* G9 C& E: _0 ]: T( r2 v/ g
为什么呢?/ t" s" E& B" A

+ ~; s# X! u. ~8 \( r3 ^  Q6 u; ]1 X
作者: forcal    时间: 2010-10-5 19:47
就象男的和女的一样,哪种好呢?5 ?; \; B7 Q; B! g+ |
master_math 发表于 2010-10-5 18:27

8 q+ q4 Q" y5 ?3 @! a您的意思是按列优先和按行优先是一样的,只是习惯而已?
1 d/ o* |4 `$ I! O& v
" m: P0 ^3 Q4 s2 \1 G
作者: forcal    时间: 2010-10-7 10:15
以下是一个区别:
! {! y' L- j, w* m1 x' K& K4 j
; P8 K5 E/ t% k* _6 Z/ Z- G$ Z5 E例如一个矩阵,如果按列存储,则计算列向量的和就比较方便;如果按行存储,计算行向量的和则比较方便。% K- v. d! G' m# ^' O% E+ L2 N

4 r! _% _$ ^1 P* Q! KForcal按行优先存储,代码:
$ v* w$ o" P4 Z+ J
  1. !using["math","sys"];
    4 u7 B  q+ M" _/ Z6 |: ?- H
  2. mvar:- |) |( L8 m' m8 @( a* [
  3. oo{p=rand[5000,5000]},
    ' l& ~: i  \5 w
  4. t0=clock(),$ |0 X7 ?. ?. x4 R
  5. oo{Sum[p,1]},4 s9 c3 \, O  u/ G# X
  6. printff{"\r\n按列求和时间: {1,r}",[clock()-t0]/1000},/ P8 r8 U) o: N) i
  7. t0=clock(),5 P/ o& h8 L' d  d2 `
  8. oo{Sum[p,2]},
    % m# R+ [; a3 m0 Q  |, R& Q8 q+ b4 O
  9. printff{"\r\n按行求和时间: {1,r}",[clock()-t0]/1000}
    " m/ ], c. ~$ \
复制代码
结果:6 O/ l. k& U8 \* g1 L8 @1 A
按列求和时间: 0.375
5 a4 j9 C5 `4 m& _按行求和时间: 4.7e-002" O8 R; m( J' |7 f

4 P! G( u/ Q) Y$ x& C2 h% R" c" Fmatlab中sum(A,1)和sum(A,2)的效率似乎不一样吧?# [0 A/ v6 z6 R6 j' A8 J

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




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