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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% S, q5 I2 G1 ?" x5 I0 d3 e. S
数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。
! J: X# r2 J$ M, z; L$ v2 x
# z7 @7 S0 o* H0 N以二维数组为例:+ A- W+ Y9 ^& Y( O/ X" y
8 l3 G2 ~6 V5 `: y$ a, v3 \
  • #python
  • import numpy as np
  • >>> A=np.array([[1,2,3],[4,5,6]])
  • array([[1, 2, 3],
  •        [4, 5, 6]])
    " M8 k6 g( m+ m! o% B9 d( b; k

" Q( Z6 d" M8 u2 M8 Q; B0 n" Q, `4 y+ m6 o# W8 |$ {
其在内存中的存储顺序为 . {6 h: i4 ^# H4 O7 @4 r; A

: Z' r) Z5 ]1 _; @9 W1 n $ i9 Y* Y8 p7 A' u$ t) \. R

( ]3 E& |$ H5 N5 f. c因此reshape之后的结果如下
* ]8 u7 m7 u5 R  m0 D# a5 g7 `4 g6 T& V9 F0 V: |4 }. o  H5 l) ~
  • #python
  • >>> A.reshape(3,2)
  • array([[1, 2],
  •        [3, 4],
  •        [5, 6]])
    9 G/ n; o$ H! X1 I/ l; s
" _  D) _# m1 N" d
9 k5 t( X/ T0 p; ?1 S- y) v0 n
而相同的数组A在matlab平台下的存储顺序为 ! Y- M! Z/ X& O6 R5 {

) m, I) Y3 i& _8 j+ o4 C- { & _, F4 e" w% k% U6 L! O

5 ?- A; H  O4 Q, k2 ?1 G$ g2 ]因此在matlab下reshape之后的结果如下
3 f" B' i  j" s7 F# U. _1 O8 N0 m3 X) c; Z8 ]. u
  • %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
    + d3 D' g2 k, f1 {  H
7 [1 g  D/ u# F: b: g# i" S% \' }

% _' T) r$ d. d' h- e另外,matlab下可以直接根据存储顺序读取数组数据,也可以看出matlab是按列存储的! V: Z2 k& u7 ]  W( r
8 j9 ^0 {! p: n. p! g
注:matlab中数组初始索引为1,因为两者语法上的一些差异,代码有所不同,已通过注释标注
3 {" o3 Z% {+ n9 F) o- Y  J! O# C4 D9 e& N
  • %matlab
  • >> A =
  •      1     2     3
  •      4     5     6
  • >> A(2)
  • ans =
  •      4
  • >> A(5)
  • ans =
  •      3
    8 e! L/ _0 X- i9 q1 b+ t- S% q1 R

2 t5 f; O: A5 @, R+ I
- ^8 C- T; t6 a不过python中不能像上面的方法使用
% [: o, u- ~  M
* b* X: s% u$ _+ ]4 i
  • #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
    % j9 U0 q* o7 Y0 j7 \, w. V4 Y
/ {8 c6 t% t( ]& Z8 P5 R( O# k

, c2 `9 Y. \" `' J8 c了解数组在内存中的存储顺序能帮助我们更好的处理数组。
9 {  o! l( ?& \- V. Z# d1 f% N; X% s; l- G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-18 09:52 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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