python 读取 mat数据_python 读取 mat 文件

(1) mat4py库:

功能: 将Matlab 数据导入为基本的Python数据类型。矩阵是以行为组的存储方式(使用列表的列表)。 Matlab结构体Struct和元胞Cell 使用Python的词典表示。

Load data from MAT-file:

函数loadmat将存储在MAT-file中的变量加载为简单的Python数据结构,仅使用词典和列表对象。数值数组和cell数组 转换为以行为主的嵌套列表(lists)。压缩数组,消除只含有一个元素的数组。产生的数据结构由简单的类型组成,兼容JSON格式。

data = loadmat('datafile.mat')

Save Python data structure to a MAT-file:

savemat('datafile.mat')

下面的数据结构不支持:

超过两维的数组

复数数组

稀疏数组

函数数组

对象类

匿名函数类

(2) 使用 import scipy.io as sio

所有的元素都封装在ndarray 中。

data = sio.loadmat('train_data.mat');

data = data['data']

测试:

结构体数组的生成。分析:list – cell, dict – struct

% 用来测试 sio.loadmat 和 mat4py.loadmat

student = repmat(struct('name',[],'age',[],'sex',[],'score',[]),2,1);

student(1).name = 'xlh';

student(1).age = 22;

student(1).sex = 'male';

student(1).score = [120,1;130,0;100,1];

student(2).name = 'gyl';

student(2).age = 20;

student(2).sex = 'female';

student(2).score = [111,0;150,2;140,0];

save('student.mat','student');

disp('save student.mat over ...');

方法1:利用 mat4.py访问.mat文件:

import mat4py

student1 = mat4py.loadmat('student.mat')

student1 = student1['student']

print type(student1) #dict

print ','.join(['%s' % key for key,val in student1.iteritems()]) # age,score,name,sex

name = student1['name']

age = student1['age']

sex = student1['sex']

score = student1['score']

print name # name list

控制台输出:

age,score,name,sex

[u'xlh', u'gyl']

方法2:利用sio访问.mat文件

import scipy.io as sio

student2 = sio.loadmat('student.mat')

student2 = student2['student']

print type(student2) #numpy.ndarray

print student2.shape #(2,1) 将结构体的每一行看作是一个数组

print '----------------'

name = []

age = []

sex = []

score = []

for id1,va1 in enumerate(student2):

va2 = va1[0]

print 'type(va1)',type(va1)

print 'type(va1[0])',type(va1[0])

name.append(va2[0])

age.append(va2[1])

sex.append(va2[2])

score.append(va2[3])

print '----------------'

print name

print '----------------'

print student2

print sex[0][0]

控制台输出:

(2L, 1L)

----------------

type(va1)

type(va1[0])

type(va1)

type(va1[0])

----------------

[array([u'xlh'],

dtype='

dtype='

----------------

[[ (array([u'xlh'],

dtype='

dtype='

[130, 0],

[100, 1]], dtype=uint8))]

[ (array([u'gyl'],

dtype='

dtype='

[150, 2],

[140, 0]], dtype=uint8))]]

mat4.py 不能处理带有汉字的mat文件。例如将上面的性别’male’改成’男’,则会报错。sio 感觉用起来麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值