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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
; Y* R+ c/ E3 z8 J9 T9 U
数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。- C* m' u, L. M$ ^
: L7 H! U8 k/ Y& t
以二维数组为例:
% ]! s+ f- x9 a% p7 }* C2 o6 z4 g8 S' W6 H; P; o! X* M
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])
    3 a$ m. x! g& Z

; \0 v" ^; F/ h8 i! ~, R0 ?- p1 @( k  p; z& g$ [1 r  [# B
其在内存中的存储顺序为
/ D% q4 }0 ]0 O& ]$ f! e4 @/ H0 p; t; ]
- g6 E* |0 R2 v9 P, P' d

+ b- X( \6 p* F! X# ?因此reshape之后的结果如下4 q+ w2 m) P( g& F5 P
' }9 M; W1 H5 N: N( m; [9 m) ~
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])
    - ]5 X7 |' [# C' P8 q. `* N

$ L1 {& V1 u) C/ [$ V- s4 R# @0 R7 J
而相同的数组A在matlab平台下的存储顺序为 7 W' e2 R) }4 R7 T

# Z0 Z6 V6 q2 \: B8 ^) d
0 [; t0 `2 T7 a5 C' [% {( v! K( y: E7 Q- I! _/ w1 {
因此在matlab下reshape之后的结果如下# c5 j: P7 I- g& ~% w7 n+ p

% I- F8 R) z! E7 Z1 Z. T
  • %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+ h2 {4 U' b: A3 i4 {3 ~

# J- z5 z3 u+ u$ B
; L6 Z" i! i. a另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的
% b5 M& _$ s( A- g. X  {+ {$ B' e
# G" |! [  y4 }" k( _/ {: j/ \注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注
! `" v- Z: Q9 O/ ^7 Z. O; [9 f& a% j! i
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      3
    2 X4 R+ p: g% ]

4 G' h3 V0 U$ K2 s, S8 n- t7 P; B. u7 b7 u* W  _
不过python中不能像上面的方法使用
9 k$ V2 m4 l) r* u* e( a! U9 o" J3 K7 q5 p: Y$ f) |
  • #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) h* V0 L4 A7 s7 c
5 w& g( [, D/ s) ]( {2 `' u

# n) {; |" e  Y# j7 ^; {  W了解数组在内存中的存储顺序能帮助我们更好的处理数组。
0 P# O1 F  Z6 d- v2 T4 g5 Y6 Z& q1 n% q% \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-31 13:47 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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