找回密码
 注册
关于网站域名变更的通知
查看: 446|回复: 1
打印 上一主题 下一主题

来对比了解一下Matlab与Python中数组按行存储的方式

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-20 10:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

. d( Q) A* A7 g7 ^数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。: t4 @5 W+ x/ h% q3 K! j
8 I7 d9 X! }% `
以二维数组为例:
( l7 _) k& g4 z, Z7 M+ Y5 R1 y$ d# t0 r% ~! n. d+ n; Z
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])
    1 V* a! \7 c5 O1 ^7 D

6 ]- t3 r' u4 a) M* a6 ^( q" }+ X9 e, k& l; B0 p
其在内存中的存储顺序为
$ ^# N# ^) B: b2 ]$ ]9 U9 T+ @" D
. V% I- ~4 S$ n, j" R / I7 ?7 @8 n$ e. `8 o9 [0 C
& ]  Z' l9 h1 J. S, Z0 a5 h
因此reshape之后的结果如下
- \) d- z1 R  [+ H& L5 Y
( O- L) w. |. j
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])( b4 j$ i, p( u* m9 A% R$ P: J
) E+ l7 Y/ w# G$ g1 p+ O

9 Q. w+ @( |8 T; d而相同的数组A在matlab平台下的存储顺序为 # d, \5 M/ \% f! u5 |1 Q$ Y, n& D
+ i) d5 u" p1 ^: X% H
! B7 T  l  ~5 V) @4 ?$ M$ V- }/ n
1 @( r& [4 b: J, ^' u2 t
因此在matlab下reshape之后的结果如下2 ^) j6 N: G' ^. C4 j  u
" f: V$ f7 O( `* q/ d5 n) A
  • %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
    * m& b+ x6 L% l3 c; y* W0 H) s* R
! o' _3 ]: D; R" f4 ], k7 }
+ D1 D- v6 |7 g! ?4 B3 Y
另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的
4 b. f$ n) K9 [$ v. V. h& b- F) q6 W. `$ W
注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注
  l9 v( Q. [% S8 [: k( o" U. i9 Z- g# E" `8 x  S9 G7 y1 E
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      3
    5 Q8 O: ~* i) f# h& O  k

1 y( e9 Y: L8 q. `' ~. c. @. t. `! B2 \: p6 h
不过python中不能像上面的方法使用1 a1 _! x2 e. U: W

. T1 ]( j% C% N& b! N6 A9 q8 j
  • #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]
  • 47 P( p# c9 V9 O; _4 [% Y% @7 k; ?
" h  Q) `- n& \
" e/ n4 W% @5 X% c
了解数组在内存中的存储顺序能帮助我们更好的处理数组。$ k+ Q! M0 Z. }$ u! x- r
5 f0 h7 C4 C. X5 x1 u$ X/ C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-30 10:03 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表