matlab与numpy的数据存储方式及特点

matlab矩阵存储方式


a = 1:120;
b = reshape(a,[2,3,4,5]);

b(:,:,1,1)= 1    3    5
            2    4    6

b是一个(2,3,4,5)的四维数组,它可以这么理解

[每一列有2个元素,每一矩阵有3列,每一页有4个矩阵,一共有5页]

(其中行,列大家都懂,页就像是几个矩阵叠起来写满一页)

科学计算的时候,一定要搞清楚自己数据的数据结构:每一行,每一列都是什么物理或数学意义,一般我们习惯以列或者矩阵为一个具有物理或数学意义的单位实体。那么我这个4维数据可以这么理解。

我有一个四维数组,它存了4×5个矩阵,每一个矩阵的大小为2×3,我想引用第n页第m个矩阵,就使用b(:,:,m,n)

可以看出,让matlab自己输出这个矩阵,它就是按照这种理解输出的,或者

我所存的数据是二维坐标点,共存了3×4×5个,我可以使用b(:,m,n,k)的形式引用某一个坐标

matlab中比元素高一级的数组的单位是“列向量”,matlab储存数据是“按列”储存的。

我们拿到一个矩阵,通常使用“第几行第几列”来引用它的一个数据元素,matlab可不是这么理解的。

matlab认为:“第几行”=“第几个列向量”, “第几列”=“列向量中的第几个元素”

所以我们来看看reshape函数对a做了些神马:

reshape为(2,3,4,5),matlab先把数据分成5页,每章有24个数据,再把一页的数据分为4个矩阵,每个矩阵有6个数据,这时第一个矩阵的数据应为1~6,这时候再把每一个矩阵的数据分为3行,所以每一列数据就变成有两个元素的列向量了。

所以如果你看到一个matlab矩阵为

[1,2,3;4,5,6]

那么它在matlab内存中的存储顺序应该为[1,4,2,5,3,6],这一点非常的重要。

a=1:120;

b=reshape(a,[2,3,4,5]);

b(:,:,1,1)

ans =

    1    3    5
    2    4    6

 

这里就可以看到并不是按照[1,2,3;4,5,6]的顺序进行排列的,所以牢记matlab存储数据是按照列向量进行存储的。


numpy中矩阵存储方式

a=np.array(range(1,121))

b=a.reshape((2,3,4,5))

b

array([[[[ 1, 2, 3, 4, 5],

         [ 6, 7, 8, 9, 10],

         [11, 12, 13, 14, 15],

         [16, 17, 18, 19, 20]],

         .........

        [[101,102,103,104,105],

         [106,107,108,109,110],

         [111,112,113,114,115],

         [116,117,118,119,120]]]])

对于这里的b的索引值,我们必须这样来理解:

[一共有两章,每一章有3页,每一页有4行,每一行有5个元素]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值