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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

4 a: w& r2 V+ s  s数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。
$ d( W- L9 V4 n: Z( T1 ?% E7 U+ I* f: h+ i% S3 I$ Y9 s
以二维数组为例:
% X% @* o- K: I: r( E- ~1 l, S2 }
* Q0 r& u: T/ \6 f! r
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])+ Z: z; N' Q, j
: G1 w% m+ r" f0 N

* r; y4 }4 w& E' _. {! }& a其在内存中的存储顺序为
( J& g4 _" ?$ s
5 I5 j  r0 M4 b! O9 o! q" J
% l; |) F# w$ _1 x4 P3 u+ @3 Z; H0 O  l$ I( ]
因此reshape之后的结果如下
. K* k" M# \+ f) P! p( `7 d9 [$ }4 m3 K  x: L* P
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])
    5 J0 H+ x. ?2 E' ?8 ^5 r& _

3 L; ^7 G2 M( m+ T; P0 s* ]* T
而相同的数组A在matlab平台下的存储顺序为
- p0 i# Z7 C; V( v5 m! P3 C3 s% R8 |: s

: x& @2 e. y" _# e  F
% d" e( i4 P0 {; |因此在matlab下reshape之后的结果如下+ h& `3 A) Q1 p

# g% h9 v0 B# X# y
  • %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
    % H7 a0 {; `. ?

$ r- }' w) U; H7 Z9 s' ~( U- I! g2 u0 l9 p' B/ b# c9 Y. _
另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的
# G+ k6 Q( G2 ~. O1 `; w3 }# `, r/ A, M4 s4 v
注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注
" C: m3 B' k  g. f$ |) z' I* M, p8 f( U9 p6 P$ o6 s2 `7 s8 g
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      3
    # e- E* b' W) T' j7 m- Y
+ s( O, ]1 D) b9 C( p
# l5 R8 j0 m6 i3 n1 y2 z
不过python中不能像上面的方法使用
& t6 H0 h9 Z+ ^- R! w# d& y# G1 y1 M7 [3 t
  • #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% o4 M3 w' ?: _- r9 [

$ }) p6 g* e$ |# d4 D5 V0 ~- D0 p% `0 `, e4 ?1 p: e! g1 T
了解数组在内存中的存储顺序能帮助我们更好的处理数组。
( K1 z. I9 f2 K6 y& F. ^6 c: |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-4 18:53 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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