Octave中如何调整EEG指标矩阵的展示格式?
修改Octave脚本实现EEG指标矩阵格式转换
原代码生成的是2×8×20×19的四维矩阵,我们需要将其重塑为二维矩阵,每行对应(epochs,电极)的8项指标,顺序为:按电极分组,每个电极下的20个epochs依次排列。
修改思路
核心通过Octave的维度调整与重塑函数实现:
- 用
permute调整四维矩阵的维度顺序,将电极维度移至最前,随后是epochs维度,接着是患者维度,最后是指标维度,以此保证排列顺序符合需求。 - 用
reshape将调整后的多维矩阵转为二维,每行对应一组(epochs,电极)的8项指标。
修改后的完整代码
close all; clc; pkg load image; pkg load signal; bestsize = 299900; % 创建初始metrics矩阵 metrics = zeros(2,8,20,19); for i = 1:2 filename = sprintf('sub%03d.csv', i ); % 读取数据并移除首行首列 patient = dlmread(filename,';',1,1); sizepat = size(patient,1); if sizepat <= bestsize % 补零至300000行 patient0 = padarray(patient,[300000-sizepat,0],0,"post"); else % 截断后补零至300000行 patient0 = patient(1:bestsize, 1:19); patient0 = padarray(patient0,[100,0],0,"post"); end % 重塑为epochs×采样点×电极的三维矩阵 patient1 = reshape(patient0,20,15000,19); % 计算各项统计指标 for j = 1:20 for k = 1:19 metrics(i,1,j,k) = max(patient1(:,j,k)); % 最大值 metrics(i,2,j,k) = min(patient1(:,j,k)); % 最小值 metrics(i,3,j,k) = mean(patient1(:,j,k)); % 均值 metrics(i,4,j,k) = std(patient1(:,j,k)); % 标准差 metrics(i,5,j,k) = var(patient1(:,j,k)); % 方差 metrics(i,6,j,k) = kurtosis(patient1(:,j,k));% 峰度 metrics(i,7,j,k) = skewness(patient1(:,j,k));% 偏度 metrics(i,8,j,k) = peak2peak(patient1(:,j,k));% 峰峰值 end end end % 格式转换核心代码 % 调整维度顺序:电极 -> epochs -> 患者 -> 指标 metrics_permuted = permute(metrics, [4, 3, 1, 2]); % 重塑为二维矩阵:380行(19电极×20epochs),16列(2患者×8指标) metrics_2d = reshape(metrics_permuted, [], 2*8); % 替换原metrics变量(也可直接使用metrics_2d) metrics = metrics_2d; % 保存处理后的数据 save("metrics.mat","metrics");
关键代码说明
permute(metrics, [4, 3, 1, 2]):原矩阵维度顺序为[患者, 指标, epochs, 电极],调整后变为[电极, epochs, 患者, 指标],确保输出顺序是先遍历所有电极,每个电极下遍历所有epochs。reshape(metrics_permuted, [], 2*8):[]让Octave自动计算行数(19×20=380),列数固定为16(每个患者对应8个指标列),最终每行对应一组(epochs,电极)的所有统计指标。
内容的提问来源于stack exchange,提问作者kostasmath23
相关产品推荐
相关产品推荐

