前言
我在matlab中存了2个.mat文件
其中EEG_data大于2G,所以存的时候是以v7.3版本存的
另外EEG_labels比较小,所以存的时候不是v7.3版本
EEG_data的维度是40×32×8064×32
EEG_labels的维度是40×4×32
一、EEG_labels的读写
由于EEG_labels不是v7.3版本存储的,所以直接调用
import scipy.io as scio
import numpy as np
filepath = 'E:\DEAP_matlab\DEAP数据集\data_preprocessed_matlab/EEG_labels.mat'
dict_labels= scio.loadmat(filepath)
EEG_labels=dict_labels['EEG_labels'] #其中dict_labels的Key只有EEG_labels
EEG_labels=np.array(EEG_labels)
print(EEG_labels.shape)
运行结果是
(40, 4, 32)
说明导入的数据没有发生倒置
二、EEG_data的读写
由于EEG_data是保存的v7.3版本,如果我还用上边的方法scipy.io.loadmat函数加载数据会出现错误
NotImplementedError: Please use HDF reader for matlab v7.3 files
只能用另一种方法:
import h5py
import numpy as np
with h5py.File("E:\DEAP_matlab\DEAP数据集\data_preprocessed_matlab/EEG_data.mat") as f:
EEG_data = f["EEG_data"][:]
EEG_data = np.matrix.transpose(EEG_data) #这里的transpose函数的功能就是保持原来的维度在原来的位置
print(EEG_data.shape)
所以打印出来的是我想要的
(40, 32, 8064, 32)
加入这里没用到transpose
import h5py
import numpy as np
with h5py.File("E:\DEAP_matlab\DEAP数据集\data_preprocessed_matlab/EEG_data.mat") as f:
EEG_data = f["EEG_data"][:]
EEG_data = np.array(EEG_data)
print(EEG_data.shape)
打印出来的维度是
(32, 8064, 32, 40)
维度发生了变化
总结
记录一下,对于v7.3版本的mat文件和非v7.3版本的mat文件的读写不一样,同时得注意维度变换的问题。