如何读取mat文件 python

Python0351

如何读取mat文件 python,第1张

一、mat文件

mat数据格式是Matlab的数据存储的标准格式。在Matlab中主要使用load()函数导入一个mat文件,使用save()函数保存一个mat文件。对于文件

load('data.mat')

save('data_1.mat','A')

其中,'A'表示要保存的内容。

二、python中读取mat文件

在python中可以使用scipy.io中的函数loadmat()读取mat文件,函数savemat保存文件。

1、读取文件

如上例:

#coding:UTF-8

import scipy.io as scio

dataFile = 'E://data.mat'

data = scio.loadmat(dataFile)

注意,读取出来的data是字典格式,可以通过函数type(data)查看。

print type(data)

结果显示

<type 'dict'>

找到mat文件中的矩阵

print data['A']

结果显示

[[ 0.          0.          0.          0.          0.          0.          0.

0.          0.          0.          0.          0.          0.          0.

。。。。。。。。。。。

0.          0.          0.          0.          0.          0.          0.

0.36470588  0.90196078  0.99215686  0.99607843  0.99215686  0.99215686

0.78431373  0.0627451   0.          0.          0.          0.          0.

0.          0.          0.          0.          0.          0.          0.

。。。。。。。。。。。。

0.94117647  0.22745098  0.          0.          0.          0.          0.

0.          0.          0.          0.          0.          0.          0.

0.          0.          0.          0.          0.          0.          0.

0.          0.          0.          0.          0.          0.30196078

。。。。。。。

0.          0.          0.          0.          0.          0.          0.

0.          0.          0.          0.          0.          0.          0.        ]]

格式为:

<type 'numpy.ndarray'>

即为numpy中的矩阵格式。

2、保存文件

将这里的data['A']矩阵重新保存到一个新的文件dataNew.mat中:

dataNew = 'E://dataNew.mat'

scio.savemat(dataNew, {'A':data['A']})

有阶乘函数,Numpy中,mat必须是2维的,但是array可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。

在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积。

若a=mat([1,2,3]) 是矩阵,则 a.A 则转换成了数组,反之,a.M则转换成了矩阵。

扩展资料:

常用的Numpy运算:

取矩阵中的某一行 ss[1,:] 或该行的某两列 ss[1,0:2]

将数组转换成矩阵 randMat=mat(random.rand(4,4))

矩阵求逆 randMat.I

单位阵 eye(4)

零矩阵 zeros((x,y)) 建立x行y列的零矩阵。

最大值和最小值 a.max(),a.min() ,而a.max(0) 表示按列选取每列的最大值。最大/小元素的下标 a.argmax(),a.argmin()

#作为方法x.sum() #所有元素相加x.sum(axis=0)   #按列相加x.sum(axis=1)   #按行相加#作为函数sum(a,axis=0)ss.mean() 

mean(a,axis=0(或1))  #按列或行求均值var(a)var(a,axis=0(或1))  #按列或行求方差。

std(a)std(a,axis=0(或1))   #按列或行求标准差ss.T或ss.transpose() #转置。

使用sicpy.io即可.sicpy.io提供了两个函数loadmat和savemat,非常方便.

以前也有一些开源的库(pymat和pymat2等)来做这个事,

不过自从有了numpy和scipy以后,这些库都被抛弃了.

下面是一个简单的测试程序,具体的函数用法可以看帮助文档:

[python] view plaincopy在CODE上查看代码片派生到我的代码片

import scipy.io as sio

import matplotlib.pyplot as plt

import numpy as np

#matlab文件名

matfn=u'E:/python/测试程序/162250671_162251656_1244.mat'

data=sio.loadmat(matfn)

plt.close('all')

xi=data['xi']

yi=data['yi']

ui=data['ui']

vi=data['vi']

plt.figure(1)

plt.quiver( xi[::5,::5],yi[::5,::5],ui[::5,::5],vi[::5,::5])

plt.figure(2)

plt.contourf(xi,yi,ui)

plt.show()

sio.savemat('saveddata.mat', {'xi': xi,'yi': yi,'ui': ui,'vi': vi})