数学建模社区-数学中国

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

作者: 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
我想是按列优先的好些. ~9 P  o: s4 T% p2 _. v, }
whuteric 发表于 2010-10-5 16:22

* O* B3 t2 N2 `5 j; K' X. \为什么呢?; e2 \8 L! F+ M5 W

+ E, m- ]8 @4 |, A7 x
作者: forcal    时间: 2010-10-5 19:47
就象男的和女的一样,哪种好呢?
0 W* t0 }! w+ ~6 amaster_math 发表于 2010-10-5 18:27

" G; J- ^( l7 X* v您的意思是按列优先和按行优先是一样的,只是习惯而已?
. E+ E4 [9 V, q) w# p) }! l. j* B- N5 |1 H

作者: forcal    时间: 2010-10-7 10:15
以下是一个区别:
8 c2 {7 Y  D6 F7 Z6 n; E
+ s7 m  v: U: ^/ e0 N例如一个矩阵,如果按列存储,则计算列向量的和就比较方便;如果按行存储,计算行向量的和则比较方便。8 w# {6 |# b! P# q

7 O( G1 K: C" p7 UForcal按行优先存储,代码:
& }7 p* z9 N' _1 w: A& f
  1. !using["math","sys"];9 A- R- ~7 B* ^  k* |9 F1 M
  2. mvar:) ]. c5 f% T( ^- o
  3. oo{p=rand[5000,5000]},3 E) U/ X% {% s3 g
  4. t0=clock(),. U' Y6 H% k" ], D3 g. }
  5. oo{Sum[p,1]},, F6 x: C* p7 |( {
  6. printff{"\r\n按列求和时间: {1,r}",[clock()-t0]/1000},
    0 d8 f6 r0 q7 \- t' i. B4 p
  7. t0=clock(),4 ~+ n" d8 P% z2 b+ t! r5 A$ B  E* U
  8. oo{Sum[p,2]},
    6 j7 p1 S- ]6 K" x
  9. printff{"\r\n按行求和时间: {1,r}",[clock()-t0]/1000}
    " h) E/ V( A. _9 y
复制代码
结果:+ t$ v  v! V4 r) R
按列求和时间: 0.375
' x" N5 G- k8 l$ p4 W4 X按行求和时间: 4.7e-002
) C6 a" h7 J+ c/ k% }9 G2 t4 h
# G' w7 g* d9 K, I# @- j% Tmatlab中sum(A,1)和sum(A,2)的效率似乎不一样吧?
1 {# U# B. c) m, ^7 P4 x
作者: okdjl    时间: 2011-12-17 11:53
大家有什么好看法,赶快说说




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