赞
踩
详细参考:https://docs.scipy.org/doc/scipy/reference/tutorial/io.html
(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')
下面的数据结构不支持:
使用手册:https://pypi.python.org/pypi/mat4py/0.4.0
(2) 使用 import scipy.io as sio
所有的元素都封装在ndarray 中。
data = sio.loadmat('train_data.mat');
data = data['data']
使用手册: https://docs.scipy.org/doc/scipy/reference/tutorial/io.html
测试:
结构体数组的生成。分析: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
控制台输出:
<type 'dict'>
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]
控制台输出:
<type 'numpy.ndarray'>
(2L, 1L)
----------------
type(va1) <type 'numpy.ndarray'>
type(va1[0]) <type 'numpy.void'>
type(va1) <type 'numpy.ndarray'>
type(va1[0]) <type 'numpy.void'>
----------------
[array([u'xlh'],
dtype='<U3'), array([u'gyl'],
dtype='<U3')]
----------------
[[ (array([u'xlh'],
dtype='<U3'), array([[22]], dtype=uint8), array([u'male'],
dtype='<U4'), array([[120, 1],
[130, 0],
[100, 1]], dtype=uint8))]
[ (array([u'gyl'],
dtype='<U3'), array([[20]], dtype=uint8), array([u'female'],
dtype='<U6'), array([[111, 0],
[150, 2],
[140, 0]], dtype=uint8))]]
mat4.py 不能处理带有汉字的mat文件。例如将上面的性别’male’改成’男’,则会报错。sio 感觉用起来麻烦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。