如何将.mat文件转换为MNE Raw文件?转换时字符串转浮点报错怎么解决?
错误原因
scipy.io.loadmat()读取.mat文件返回的字典除了实际EEG信号数据外,还包含__header__、__version__这类字符串类型的元数据字段,你直接将全部字典键值对转为numpy数组,混入了非数值内容,不符合mne.io.RawArray()要求的「通道数×采样点数」二维数值矩阵输入规范,因此触发类型转换报错。
正确转换步骤
BCICIV_calib_ds1d是BCI竞赛公开数据集,字段结构固定,可按照以下步骤完成转换:
- 读取.mat文件时启用
squeeze_me参数自动压缩多余的单维度嵌套
import numpy as np import scipy.io import mne mat_data = scipy.io.loadmat('BCICIV_calib_ds1d.mat', squeeze_me=True)
- 提取有效EEG数据与元数据
# 提取EEG信号矩阵,原始形状为 [采样点数, 通道数],转置为MNE要求的 [通道数, 采样点数] eeg_data = mat_data['cnt'].T # 提取采样频率 sfreq = mat_data['fs'] # 提取通道名称列表 ch_names = mat_data['nfo']['clab'].tolist()
- 生成MNE Info对象
# 声明所有通道为EEG类型 ch_types = ['eeg'] * len(ch_names) info = mne.create_info(ch_names=ch_names, sfreq=sfreq, ch_types=ch_types)
- 生成Raw格式对象
raw = mne.io.RawArray(eeg_data, info)
可选操作:如果后续需要做溯源、电极位置相关分析,可添加代码配置标准电极定位:
raw.set_montage('standard_1020')
内容的提问来源于stack exchange,提问作者Hasin Manjare
相关产品推荐
相关产品推荐

