|  | 
 
| 
; Y* R+ c/ E3 z8 J9 T9 U
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。- C* m' u, L. M$ ^
 : L7 H! U8 k/ Y& t
 以二维数组为例:
 % ]! s+ f- x9 a% p7 }* C2 o6 z4 g8 S' W6 H; P; o! X* M
 
 #pythonimport numpy as np>>> A=np.array([[1,2,3],[4,5,6]])array([[1, 2, 3],       [4, 5, 6]])3 a$ m. x! g& Z
 ; \0 v" ^; F/ h8 i! ~, R0 ?- p1 @( k  p; z& g$ [1 r  [# B
 其在内存中的存储顺序为
 / D% q4 }0 ]0 O& ]$ f! e4 @/ H0 p; t; ]
 
  - g6 E* |0 R2 v9 P, P' d 
 + b- X( \6 p* F! X# ?因此reshape之后的结果如下4 q+ w2 m) P( g& F5 P
 ' }9 M; W1 H5 N: N( m; [9 m) ~
 
 #python>>> A.reshape(3,2)array([[1, 2],       [3, 4],       [5, 6]])- ]5 X7 |' [# C' P8 q. `* N
 $ L1 {& V1 u) C/ [$ V- s4 R# @0 R7 J
 而相同的数组A在matlab平台下的存储顺序为 7 W' e2 R) }4 R7 T
 
 # Z0 Z6 V6 q2 \: B8 ^) d
   0 [; t0 `2 T7 a5 C' [% {( v! K( y: E7 Q- I! _/ w1 {
 因此在matlab下reshape之后的结果如下# c5 j: P7 I- g& ~% w7 n+ p
 
 % I- F8 R) z! E7 Z1 Z. T
 %matlab>> A=[1,2,3;4,5,6]A =     1     2     3     4     5     6>> reshape(A,3,2)ans =     1     5     4     3     2     6+ h2 {4 U' b: A3 i4 {3 ~
 # J- z5 z3 u+ u$ B
 ; L6 Z" i! i. a另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的
 % b5 M& _$ s( A- g. X  {+ {$ B' e
 # G" |! [  y4 }" k( _/ {: j/ \注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注
 ! `" v- Z: Q9 O/ ^7 Z. O; [9 f& a% j! i
 
 %matlab>> A =     1     2     3     4     5     6>> A(2)ans =     4>> A(5)ans =     32 X4 R+ p: g% ]
 4 G' h3 V0 U$ K2 s, S8 n- t7 P; B. u7 b7 u* W  _
 不过python中不能像上面的方法使用
 9 k$ V2 m4 l) r* u* e( a! U9 o" J3 K7 q5 p: Y$ f) |
 
 5 w& g( [, D/ s) ]( {2 `' u#python>>> A=np.array([[1,2,3],[4,5,6]])array([[1, 2, 3],       [4, 5, 6]])>>> A[1]array([4, 5, 6])>>> A[2]IndexError: index 2 is out of bounds for axis 0 with size 2>>> A[1,0]4) h* V0 L4 A7 s7 c
 
 # n) {; |" e  Y# j7 ^; {  W了解数组在内存中的存储顺序能帮助我们更好的处理数组。
 0 P# O1 F  Z6 d- v2 T4 g5 Y6 Z& q1 n% q% \
 
 | 
 |