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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

" v# T3 |8 V7 z6 `7 ^% ]4 C3 h" U数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。
' I* y4 W# D9 z  u6 |6 V& T: B: I$ J8 x/ x0 M% a: {: y
以二维数组为例:$ |5 [! G' X1 C
! }! |9 i! Y* `; F& J
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])
    ! T( V% b3 R' t+ j6 ]$ B

- R+ F' w. v* Y1 g4 w; Z
" Q3 a% _! j+ U2 w' D. p" R其在内存中的存储顺序为 ' I" h" N" d4 q  q/ D

3 p4 k& W* N# \ ) R* i% p  w/ \% {; |  k

/ `1 k. l- w! H: K- _( k0 A: e5 N因此reshape之后的结果如下9 O' J, z7 E3 }1 d

0 T3 b1 _# E1 n( w$ V) c* K
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])
    8 [" h4 z4 ]2 x9 w0 v# B, j

: c+ T8 J' R: ^4 i
  [0 O9 r4 v$ |2 c7 }+ A而相同的数组A在matlab平台下的存储顺序为 0 B# r4 K; ~9 r6 S5 Y+ G

2 a, L/ T: x7 s
& N+ P4 r' O% Y) ^* ^3 a" J
9 I( r- ^% ?' I; G8 B0 z因此在matlab下reshape之后的结果如下4 a/ {$ m0 X/ \
  y/ E# w8 U+ Z9 s2 h& W
  • %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( B: D% V8 t/ @1 h2 x% X

8 J; G( [1 T' h. m* D
7 E( D# a5 N/ H/ t" ~另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的$ B6 i! ?; n" [" X1 l: y( H

( n& ]+ I( r" H) [# L: Q! f0 [注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注8 e- e6 W% n' F4 ]) {8 M

8 P, @9 h' w$ y* L6 e& h" h3 G. @
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      3( K$ y4 k& ~1 c- @

! X6 {1 W1 i# u; t9 Q
  P: p% ~( U* _: K不过python中不能像上面的方法使用- b. e# O% ^4 P6 L/ \+ i8 W" F

8 I) f' ^1 t  p7 ~0 }* t5 I+ _
  • #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]
  • 45 a* r: \) Q  P/ g

3 ^1 n$ @0 S9 G' W. k. P2 u% A5 h* t! y$ M4 t1 B- S5 N
了解数组在内存中的存储顺序能帮助我们更好的处理数组。7 P- x7 B; G  Y

' W- F+ k# [" f) V2 V& ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 08:31 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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