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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
3 d; ]; e! R5 L5 [- l$ s' L
数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。
7 t9 X; u4 `. ]( T3 P3 |0 J, g$ c/ S4 e
以二维数组为例:
$ U% E6 [0 M8 C' x: Y5 @0 z6 E8 n( m- ~. r& \  r3 j8 }9 Z
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])' C7 h1 y) T/ H& D0 \' N& S# Z

$ o( S  P+ Y- S4 q# l
* J# e; b1 y, x0 p其在内存中的存储顺序为 ; u) l" T" [7 |; y* s/ O
$ ~+ H  ^1 k; N* `  {  m
" [$ v, P) q4 S

1 o3 f4 ^, b" K0 _. \因此reshape之后的结果如下" `: @+ _, I, K) G0 R& N

# I" J7 @' b/ @/ N1 H9 ]
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])
    - {% y0 X4 m+ s9 p
5 ?/ b; a0 D' p! j4 o3 z, |
* d6 A0 c% s7 M, Y  V
而相同的数组A在matlab平台下的存储顺序为 ; H/ G* T& B9 k# _& g! r
) {7 E' G3 s; c) @- b% x7 C

' D/ ~1 u9 y" p- f6 W- g3 H& |& j$ {% ~. i. D
因此在matlab下reshape之后的结果如下4 H9 y" S* }  i2 I% ^. s! Y( @& Q
# [9 r$ ~% I1 {7 W2 c6 h8 ?& M
  • %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- f7 o! g% D" t
  K* N& p: O& q) Q1 g
$ @) q6 W; ]  H+ H$ Y3 q
另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的
" c5 x6 g% m" v; d
2 _6 U7 E/ x0 j; o  H4 N" K( {注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注
  Z  G5 t$ X, M8 f, l; r8 G* H
! D4 Q# ^$ W) s/ W$ w
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      33 K+ h5 h1 Z) d" N
! n& R) d9 X/ U: Z
. _& t- l# f+ j- G( i+ m+ k
不过python中不能像上面的方法使用
; \! R; Y0 p: X8 C2 B- o
! x, V: q+ _1 z4 `, n; D* t% S
  • #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
    ) S. S5 ?6 [/ @3 D- B
  E: }) e! o9 O) A: [
1 q3 d& l' D1 a- c4 a7 k0 m% Q
了解数组在内存中的存储顺序能帮助我们更好的处理数组。
( K. C$ D- N4 o: K/ l: r
, U0 U) E" y2 \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-5 17:29 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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