数学建模社区-数学中国

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

作者: 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
我想是按列优先的好些! Y4 N8 H6 x  ^) [' a2 |! l$ m
whuteric 发表于 2010-10-5 16:22
' M$ l" p9 W, g4 A6 o8 {
为什么呢?
# }1 \: S( I2 m# \7 M( t2 ^5 @2 |0 e" i) T. x

作者: forcal    时间: 2010-10-5 19:47
就象男的和女的一样,哪种好呢?
+ R, T6 O; P1 I8 a8 V& Tmaster_math 发表于 2010-10-5 18:27

( D( b+ A4 Q! ~您的意思是按列优先和按行优先是一样的,只是习惯而已?1 ^/ \& J- `  }* y# F8 A* a
' }+ e- A2 o3 \

作者: forcal    时间: 2010-10-7 10:15
以下是一个区别:
& D& J8 [8 Q8 L4 t3 J* p0 C9 z3 R- Q* I( A4 J
例如一个矩阵,如果按列存储,则计算列向量的和就比较方便;如果按行存储,计算行向量的和则比较方便。
# N" X% y9 c0 O, f7 O  D0 F2 C& @4 j) h- Q
Forcal按行优先存储,代码:0 e/ S4 R! Y  w9 \/ T
  1. !using["math","sys"];
    # S3 O# y6 S! j" f* X  T
  2. mvar:
    $ r0 E$ \0 t, k+ ?( d) j, f4 R
  3. oo{p=rand[5000,5000]},0 W0 D9 o, E& q) L
  4. t0=clock(),$ v7 _' t/ W! u& _2 }
  5. oo{Sum[p,1]},
    , \, W! A+ Q9 K) O* b# p; s$ ]
  6. printff{"\r\n按列求和时间: {1,r}",[clock()-t0]/1000},6 P3 s1 V8 S1 g) Y9 m) ?
  7. t0=clock(),
    1 x' x( c8 S9 D" D
  8. oo{Sum[p,2]},
    & ?$ S9 Y% Z/ R
  9. printff{"\r\n按行求和时间: {1,r}",[clock()-t0]/1000}. k1 j' z1 T; w) p7 C6 h
复制代码
结果:
  Z1 W! h; V! _3 H: C/ Q按列求和时间: 0.375
7 d4 ^6 `  \; F按行求和时间: 4.7e-002: n3 T  C  ?! v* r% }
/ F( [% R/ l' L8 U; Y
matlab中sum(A,1)和sum(A,2)的效率似乎不一样吧?
% C% ]& `# Z1 C# u! L+ J: ]
作者: okdjl    时间: 2011-12-17 11:53
大家有什么好看法,赶快说说




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