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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

" Z( J% V! G: h% Y- t/ {) P8 v/ l数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。, L& W3 b. `8 X( N! {9 ^
8 F2 l/ Y8 [8 u: z4 F' V  T. j
以二维数组为例:( V8 E* y5 D, [

) A4 P4 W) z/ T6 j6 h+ o  r6 W$ J
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])8 H8 d9 }4 g% r3 x3 w' N
9 G0 X/ Z6 I+ x
# ]6 l+ V" K' k3 A* O
其在内存中的存储顺序为
7 D# x# F7 @7 J0 A  }: k. c% A3 f3 G  Z
1 `$ w7 i) ]4 p8 o

' W! w( G! i& g* B! o8 g因此reshape之后的结果如下
% ]4 d! i( ^. v  n4 j
0 @) Y$ X+ S. n& v9 _- g
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])
    5 f; l, J) D1 A0 L, w' f

7 o4 L& B8 W2 q9 n# {, ?: c  E5 B( R2 ^: d  A1 \: m
而相同的数组A在matlab平台下的存储顺序为 + _1 }: o: y1 q. I* Z

& b3 K1 g& K; p. ]
1 {9 d) l0 A, @0 D2 j. V3 Z
& m4 s6 F7 @8 q* {% x/ w$ `8 T因此在matlab下reshape之后的结果如下
5 |% P! P5 }! _+ g. u) z. _# d& j( F- \: m  h
  • %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. w. x& Z3 A. a. L- W7 M

7 m: E6 \) ]# x: m3 O! e. }7 V8 ~; P& L: e9 S. E! e6 r8 d
另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的& X' x" ]" H4 d* T& N" n4 J
  h6 _7 c0 a9 B+ o) p
注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注
" Y* U( s( N( S- h! N( _- M! P0 o4 G# Q+ b1 g0 e5 K+ M
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      3( F' b3 k5 M2 e# C$ w
; X; p! v$ U! L: u& t9 \
& p9 a2 a2 ~1 F, U2 e1 ~7 @( k
不过python中不能像上面的方法使用" x8 ^9 a' E( o: ]+ v0 H3 J
5 \4 s! G$ |9 ^# 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]
  • 40 ?' f7 z8 @2 y3 {* [6 O

  }1 |6 M1 v3 [  A: B2 l$ u& p9 F/ h9 L, N! t
了解数组在内存中的存储顺序能帮助我们更好的处理数组。0 X' {$ f5 L/ v8 T0 f& V

2 t: T& W9 r5 \8 ?6 ^) w; E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 01:58 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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