文章目录
前言
最近的代码大多都是用matlab来编程的,但是我关于matlab的学习一直都是需要什么去百度或者帮助里面搜索,语法掌握不如python,避免不了一直进行重复搜索,因此通过这个博客将自己遇到的知识点进行汇总,为以后编程时提供便利。
一、文件读入
1.xlsx文件
[num,txt,raw]=xlsread('G:\dataset\CHB-MIT波士顿儿童医院癫痫EEG脑电数据\data_summary_copy.xlsx',1);
- 其中:num返回的是excel中的数据,txt输出的是文本内容,raw输出的是未处理数据。为了直接处理所有的数据,我一般习惯用raw来进行后续操作
- txt和raw为元组(cell),可以通过raw{i,j}获取第i行和第j列的值
- 代码最后的1代表读取第一个活动表中的内容
[num,txt,raw]=xlsread('G:\dataset\CHB-MIT波士顿儿童医院癫痫EEG脑电数据\data_summary_copy.xlsx',1,'A2:C5');
%代表读取第1个活动表中A2-C5之间的内容
二、文件保存
1.保存变量为mat格式
save '01.mat' phase_syn
将变量phase_syn保存为在当前路径下的文件名为’01.mat’,也可以通过直接写绝对或相对路径保存在自己想要的路径下
注意
如果多次循环处理时,想每次保存时用变量来代表文件名,保存方式如下:save(filename,'a');
filename为变量名(存放文件名),a为需要保存的变量。
因为没有注意正确的格式,导致跑了一个下午的代码只保存了最后一轮。
savename = ['sub01_' freq_name{i} '.mat'];
save savename phase_syn;
save savename 'phase_syn';
% 这两种保存方式会把变量直接保存成 savename.mat,需要注意!!!!
save ['sub01_' freq_name{i} '.mat'] phase_syn;
%这样会保存成['sub01_' freq_name{i} '.mat'].mat
save(['sub01_' freq_name{i} '.mat'],phase_syn);
% 会报错,报错信息:必须为字符串标量或字符向量。
save(['sub01_' freq_name{i} '.mat'],'phase_syn');
% 这样也可以成功保存,要把需要保存的变量名加上引号
三、变量
1.储存字符变量
可以通过两种方式:
s = char('alpha','beta','gamma');
得到二维字符数组freq_name = {'delta','theta','alpha','beta','gamma'};
可以通过元组的方式,通过freq_name{i}可以读取第i个- 尝试了用[‘delta’,‘theta’,‘alpha’,‘beta’,‘gamma’],发现会直接拼接到一起,这是字符串拼接的一个方法
2.结构体
利用结构体数组可以在一个数组中存放不同类型的数据,自我感觉有点类似与python中的字典,非常好用。结构体数组的基本单位是域,在matlab中,可以随时增减域。
% 创建结构体
phase_syn = struct('name',[],'is_seizure',[],'phase',[],'seizure_time',[],'seizure_num',[]);
% 储存数据,例如:
phase_syn(1).name = 'sub01';
phase_syn(2).name = 'sub02';
四、数据类型转换
1.元组转数字
代码示例
a = str2num('[]');
isempty(a);
% 输出为1,说明a为空
a = str2num('[111 222]')
%输出为 111 222
a(1)
%输出为 111
a(2)
%输出为222
五、一些操作
1.获取变量尺寸
[a,b] = size(data);
六、画图
1.画折线图及部分数据点标记
% 数据
phase = data(i).phase;
%得到对应的x轴的值
[s,e] = size(phase);
x = 1:1:e;
%画图
plot(x,phase,'-*b');
% 加标题
title(['sub01-' freq_name{j} ' ' num2str(i) ' seizure window:' num2str(seizure)]);
%如果对部分数据点进行着重标记
%其中,p是序列中对应的位置
%例如 p=5,那就是对第五个点的位置加上一个红圆圈
%p=[2,3]就是对第2,3个数据点的位置上都加一个红圆圈
text(double(x(p)),double(phase(p)),'*','color','r','FontSize',35);
效果如图所示:
2.保存图片到本地
frame = getframe(gcf); % 获取当前的frame,gcf代表当前图窗的句柄
img = frame2im(frame); % 将frame变换成imwrite函数可以识别的格式
rootpath = 'E:\code\matlab_code\epilepsy\picture';
name = ['sub01_' freq_name{j} '_' num2str(i) '.jpg'];
savepath = fullfile(rootpath,name);
imwrite(img,savepath);
总结
边遇到问题边整理~