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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
9 l1 W8 u/ j; @' Q7 ]0 P
数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。. V' ~* Z' w" P4 [" k- E6 p6 a
2 W! ?. [5 i( e
以二维数组为例:
. z9 @0 V( P& r$ C6 T
  R  N% e; r; x, P1 u' ?4 h
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])
    2 l1 b; g) o5 k- Q' f! Y

, [# e  ~- e% W  ~8 u4 v( g
. h/ a2 u: `7 m2 r0 T. n# ^# c: l' u* U其在内存中的存储顺序为
2 w) p$ a0 x, E- q. R  F1 Z1 G( ~0 \0 F4 x5 z5 {

0 e3 j/ A# r" N- x5 z# |" r" ]4 ?+ g$ L: U7 y( m8 F
因此reshape之后的结果如下( s8 }) V/ `7 u# `0 N* S

3 f( o9 v7 ]; E/ [
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])+ a7 |  G3 f# K7 t  B3 O4 R
0 q8 O/ |- n# w) u- Q7 e

* I# i! k  ]5 W" B0 s- g而相同的数组A在matlab平台下的存储顺序为
1 p" t0 `( ]/ q$ @- ~4 ]2 g! X8 m0 p1 G6 ]1 {
6 v; F9 b1 }* G( A4 m* L! j
& g+ P' B1 j( k& i2 I9 i$ u
因此在matlab下reshape之后的结果如下
! S, h# W# ^" b2 K
4 I2 o5 F7 K( T: J
  • %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
    % o! w  X) O' m. F5 r2 ~4 B. Z
% i0 A, p, I! _+ @
3 [, |; R! }& U% o  U& d1 Z
另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的
( J6 Z/ D. W; V4 |. i* z
- W: C3 f, }1 k8 t7 ]! a, y5 N注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注
3 H: ], \: ?* B
, F7 O) ~4 r+ f4 P" b; R* ^5 E
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      35 E3 w2 n% ^( m7 R

0 L; F  Q7 h% x/ {
5 t& b) K$ j9 t) l4 s& n2 U不过python中不能像上面的方法使用
2 Z( U* P2 a/ N% V3 [6 i8 l8 h
  • #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- g$ y+ \- l6 o8 i4 R+ a' O0 x
  L8 |$ [: D, N6 m

0 C; F; P3 g( Z+ S( G. j% t1 }9 L了解数组在内存中的存储顺序能帮助我们更好的处理数组。3 U+ K( H% C/ J# i

" j5 ?3 J+ _0 }4 T1 _, Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 00:52 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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