数学建模社区-数学中国

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

作者: 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
我想是按列优先的好些
8 E! o4 B1 F, h2 Q& {+ cwhuteric 发表于 2010-10-5 16:22
7 ]7 E1 y$ `8 z3 s& p
为什么呢?3 Z. k3 ]) u; _9 `* F) _
3 ]0 w# Y, S! j- ]9 [

作者: forcal    时间: 2010-10-5 19:47
就象男的和女的一样,哪种好呢?
& Z! F" A0 Y4 omaster_math 发表于 2010-10-5 18:27

( Z. Z9 `7 s2 |您的意思是按列优先和按行优先是一样的,只是习惯而已?) H( J' `# M/ `6 f! W+ y9 {! }
' \3 s& S( F& j& ?0 w

作者: forcal    时间: 2010-10-7 10:15
以下是一个区别:# T& [9 p8 n. d7 ?

1 J" V# e) c& z3 g例如一个矩阵,如果按列存储,则计算列向量的和就比较方便;如果按行存储,计算行向量的和则比较方便。$ V3 ]  W( o7 z5 e# s. R, @2 ]+ J: y

  i. ?- w0 N! Z! pForcal按行优先存储,代码:( h  I6 e. r4 h9 }
  1. !using["math","sys"];  {$ N; c8 r$ v" d4 ]
  2. mvar:
    + l$ B) b8 F! z8 m; z- B
  3. oo{p=rand[5000,5000]},
    7 K; A7 q4 O5 r$ O: \1 x
  4. t0=clock(),
    & y8 w8 z( a0 n( j
  5. oo{Sum[p,1]},# t; p0 D4 i$ S' a
  6. printff{"\r\n按列求和时间: {1,r}",[clock()-t0]/1000},
    ) q* V. E4 J  W' J
  7. t0=clock(),/ f3 s- K* }: ?4 R- S7 ~* {
  8. oo{Sum[p,2]},
    4 n/ Q  e6 s4 b  U4 y
  9. printff{"\r\n按行求和时间: {1,r}",[clock()-t0]/1000}
    " Y( |) w& c( |# i7 }7 o/ }5 a
复制代码
结果:
' J# i; X2 F( ^0 U" D按列求和时间: 0.375
5 J. g2 o' {$ y3 `+ M; B* s+ F按行求和时间: 4.7e-002
; j  Z3 I  S; H- Y7 Y! X
) @- ^6 a  B+ F! ~/ Rmatlab中sum(A,1)和sum(A,2)的效率似乎不一样吧?, Q/ Q* b! Q/ Q* }6 @

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




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