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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
' a7 ]3 g" Q$ v
数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。9 R7 [1 @: c9 e. X

$ d+ c  Z5 N1 m4 z9 H以二维数组为例:
" }5 g: T9 b* m" ~6 l6 `5 ]$ e, M! M) V' ?
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])9 ]/ t: Q0 k/ L# g7 T; A

( D1 z& G* W; g4 J: L! b6 R
  P! i) c: D" n0 S$ z其在内存中的存储顺序为
+ u" Q! g0 a5 b: U( S" P& ]& l: X/ k0 {
3 L' m  N$ H, M
6 S) ^' K3 s' p0 B/ O: _# @. |
因此reshape之后的结果如下9 t; b' Q- P* }' Y7 g; ~1 `

- U0 n. S+ [* M1 A% v9 l2 {- y  o
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])6 [9 D6 ]4 B, `4 ?6 {
) J1 I/ b( }, G+ f1 H5 R3 `, x
! x+ z9 ?; D: ]/ U- h
而相同的数组A在matlab平台下的存储顺序为
/ N6 Y( K' j5 \, V+ g1 k' C2 X5 N; X! E6 r. t  V
+ g; G+ H' p5 ?
/ ]" N: O  C9 a( L: d6 W$ {% d2 P
因此在matlab下reshape之后的结果如下
7 H. O) X7 G8 i! x% U. X7 L" Z( r1 v
  • %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
    $ k; e5 `6 [, ^1 f- L* ]
1 w# a2 Y; K) J

- F8 t  t: B; N# R6 W9 e  @- }另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的
5 H8 [: G9 _6 t( u3 |7 F  Q& |/ t! h" G: @" P7 p/ y: _+ d
注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注! p  G$ k3 o- E# J: f; N! Z6 l
( V) @- c$ B+ C! o
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      3
    8 m+ g- P! F7 }6 u5 I4 v

+ J% J2 Z5 ~% j, N! M$ g
/ \) t0 k4 b* p- |4 u不过python中不能像上面的方法使用
3 \5 v# X$ a4 M4 l4 b, b8 h5 D4 P' S- e0 D
  • #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]
  • 48 f% @, }# E% V+ C+ r  u5 W3 p
" m+ T+ {0 d; V4 W, G% j: n
; }/ E0 w+ y* F" g
了解数组在内存中的存储顺序能帮助我们更好的处理数组。
5 i, \' e( H8 E/ P4 E
) H0 ]. a# {/ S2 z( X. K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 10:46 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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