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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
  ~6 o( |, @5 v: K
数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。9 m  q$ z7 u9 c, r0 \

( K2 {+ ?% R# }5 n7 G) q以二维数组为例:
$ X9 _$ w- ~6 I( G8 ?" \
2 c1 D& l3 A+ K8 B5 t  I: Z6 m
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])
    4 x8 ~* a% W  f- |. S, K

+ Q; p9 K; o/ s  j& J5 A5 ^# R
1 G3 [$ P  Q2 d; L1 E, W. s# K其在内存中的存储顺序为 1 c4 [7 \6 F6 c

9 g. t1 k" i  `' M0 N: M ' i0 a$ C+ R. e: U
% m9 w# A+ r- {4 O
因此reshape之后的结果如下
" D. x( P) V/ k" i# g* b1 h, E# ]4 A" n$ B7 P2 ?5 t
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])) x5 P6 }/ x7 k% o; I

% K& d- b; w8 f) T4 e7 J1 b) @
) B& n) m6 E; P2 Z而相同的数组A在matlab平台下的存储顺序为 # S/ Y: c+ v9 a, P6 L8 e% r
% I3 B% l. O/ b, i
" J" H8 E" {9 v0 s" ]' `
# D8 V  B) J  S0 Z3 r
因此在matlab下reshape之后的结果如下
% Q1 A! F  b, T2 M& x, T- n, c$ ?/ `5 k, |& r
  • %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
    8 Q3 H) o& Z- X0 s2 D/ d
6 \; h. ~5 D8 Z; c
' g2 ^: _- P! {4 @/ h  |
另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的  i; Y, F+ g9 @% R' [% X

, x! u/ q! \- g; x注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注0 m, G- i* o! @/ e4 x5 r
8 Q5 A, V) K& Y# m  R+ h3 I4 ^
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      37 l% M; N9 ]# E2 w6 a/ g

/ v5 T2 ?0 p$ e! R# D
' h3 o7 d, A, q8 }9 i; n4 @不过python中不能像上面的方法使用
+ A1 c1 L: U& M% S' n9 {, E5 }( h8 r: O# }
  • #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) K$ I* N: @9 l
* u3 t+ _+ L" t( T- e
9 L5 d% g+ T# |' j3 \
了解数组在内存中的存储顺序能帮助我们更好的处理数组。
# w% D9 ^+ X) m/ h4 x8 `
5 e& Y  A% ?$ @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 19:55 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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