Matlab知识点总结


前言

最近的代码大多都是用matlab来编程的,但是我关于matlab的学习一直都是需要什么去百度或者帮助里面搜索,语法掌握不如python,避免不了一直进行重复搜索,因此通过这个博客将自己遇到的知识点进行汇总,为以后编程时提供便利。

一、文件读入

1.xlsx文件

[num,txt,raw]=xlsread('G:\dataset\CHB-MIT波士顿儿童医院癫痫EEG脑电数据\data_summary_copy.xlsx',1);
  1. 其中:num返回的是excel中的数据,txt输出的是文本内容,raw输出的是未处理数据。为了直接处理所有的数据,我一般习惯用raw来进行后续操作
  2. txt和raw为元组(cell),可以通过raw{i,j}获取第i行和第j列的值
  3. 代码最后的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.储存字符变量

可以通过两种方式:

  1. s = char('alpha','beta','gamma');得到二维字符数组
  2. freq_name = {'delta','theta','alpha','beta','gamma'};可以通过元组的方式,通过freq_name{i}可以读取第i个
  3. 尝试了用[‘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]就是对第23个数据点的位置上都加一个红圆圈
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); 

总结

边遇到问题边整理~

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值