python调用matlab结构体_numpy与matlab的数据交换

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 由于其语言的简洁、易读以“胶水般”的可扩展性,越来越多的童鞋选择使用Python进行科学计算。 Numpy是Python下的一个数值计算库,提供了多维数组,线性代数、傅里叶变换等众多数值计算函数。 如果使用Python+Numpy+Scipy(提供众多科学计算函数,基于Numpy)+matplotlib(一个强大的绘图库,绘图效果秒杀matlab!),那么你几乎可以做在matlab下能做的任何事情。 网上有很多比较matlab与numpy的文章,他们的各自优缺点请自行谷歌。 在此提供一个matlab与numpy函数的对照表,从表中我们可以看出,numpy中的大多数函数的名称及使用方法与matlab中很相似,但是这并不意味这把程序从matlab移植到numpy中很容易, 其中的主要困难有:1、数组的引用方式(这是之后的重点)不同; 2、numpy中矩阵乘与数组乘的区别;3、数组的拼接方式不同,这些不同之处使得程序移植与把程序重新写一遍差不多。 matlab下有许多商业的工具箱,这些东西压根就没法移植。而如果你之前使用matlab积累了一些程序,那么把这些好不容易写成的程序都移植过去也不现实。 所以,保持两边各自的“画风”不变,仅仅交换数据,是matlab与numpy联合工作的最佳选择。 科学数据其实就是一大堆的数,其他的数据结构大都是用来辅助科学计算的,所以我们只需要实现两边多维数组数据的交换就可以了,交换其他的数据结构既费劲有没有太大的意义,好了,现在切入正题。

numpy与matlab 的数组引用差别

首先我们来做一件事情,看看使用两种语言中同样功能的函数达到的不同效果:

创建一个一维数组1~120,120=2×3×4×5,然后reshape为2×3×4×5的多维数组

matlab中:

a = 1:120;

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

b

b(:,:,1,1) =

1 3 5

2 4 6

b(:,:,2,1) =

7 9 11

8 10 12

.......

b(:,:,4,5) =

115 117 119

116 118 120

首先说明一下各个索引值的意义

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个矩阵࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值