python处理mat文件实例(NASA电池数据)

        在学习python过程中,有时需要来自于matlab的数据,需要从mat文件提取数据并转换为python可以使用的数据。下面通过实例来介绍操作过程。

本文的代码来自:NASA 锂电池数据集,基于 Python 的锂电池寿命预测(Remaining Useful Life,RUL)& (End Of Life,EOF) - 倔强的小蜗牛

# 加载 mat 文件
def loadMat(matfile):
    data = scipy.io.loadmat(matfile)
    filename = matfile.split('/')[-1].split('.')[0]#先分隔并取出最后一个元素,即B0005.mat,然后再分隔取出B0005
    col = data[filename]
    col = col[0][0][0][0]
    size = col.shape[0]#获取数据的行数616
    data = []
    for i in range(size):
        k = list(col[i][3][0].dtype.fields.keys())#.dtype.fields ,它返回一个字典;.keys() 方法则用于获取这个字典的所有键,即结构化数组中的字段名。
        d1, d2 = {}, {}#建立空字典
        if str(col[i][0][0]) != 'impedance':
            for j in range(len(k)):
                t = col[i][3][0][0][j][0];#得到键值的具体数据集
                l = [t[m] for m in range(len(t))]
                d2[k[j]] = l#将数据存入d2中
        d1['type'], d1['temp'], d1['time'], d1['data'] = str(col[i][0][0]), int(col[i][1][0]), str(convert_to_time(col[i][2][0])), d2
        data.append(d1)

    return data

data = scipy.io.loadmat(matfile):

在这一步中,得到的信息可以理解为字典:

解析得到的matlab文件中不仅包含数据,有:

  • __header__通常包含MATLAB文件的头部信息,如创建文件时使用的MATLAB版本、平台信息和创建日期等。
  • __version__MATLAB文件格式的版本号。
  • __globals__在MATLAB全局工作区中存在的变量列表,若无全局变量则为空列表。
  • 'B0005':MATLAB文件中存储的实际数据变量名,也就是说,文件中最重要的数据部分很可能位于这个键对应的值中。

        通过split()分割,得到B0005,选择data中‘B0005’信息。

        下面介绍col[0][0][0][0]以及col[i][3][0][0][j][0]:

        col[0][0][0][0]:

       开始,col = data[‘B0005’]:

      

          col[0][0]得到:

        再进行一次col[0][0],即col = col[0][0][0][0]得到:

        成功进入了该页面。这里说明一下,matlab内部存储的字段视作二维字段,即使只有一个元素。所以要想获取里面的内容,都需要[0][0],可以把它当做进入内部的钥匙,当然,不一定是[0][0],可以是[1][0],后文将提到。

col[i][3][0][0][j][0]:

        进入上方页面后,col[i][3]表示选择第(i+1)行第4列(data列)。

        col[i][3][0][0]进入内部,如下图:

        接下来,col[i][3][0][0][j][0],进入下一层。

        接下来就可以对具体的数据进行操作了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值