matlab工作笔记

一、文件操作

1.1 查看指定文件夹是否存在,如果存在删除重建

savepath=['../saved/'];
if exist(savepath,'dir')
    rmdir(savepath,'s');
end 
mkdir(savepath);

1.2 查看目标文件夹下所有指定格式文件,删除文件

picFormat='tif';%图片格式
files_list = dir(fullfile(data_file,['*.',picFormat]));%查看指定格式文件
delete([data_file,files_list(end).name]); %删除列表中最后一个文件

1.3 查看目标文件夹下所有子文件夹

files_list = dir(path);

1.4 判断目标文件是否存在,如果存在则删除

if exist(txtname,'file')
    delete(txtname); 
end

1.5 写txt或ini文件

a=1:100;
b=321;
txtname='output.txt';
if exist(txtname,'file')
    delete(txtname); 
end

fid_txt=fopen(txtname,'a');
fprintf(fid_txt,'[node1]');
fprintf(fid_txt,'\r\n'); 
fprintf(fid_txt,'a=');
fprintf(fid_txt,'\r\n'); 
for i=1:length(a)-1
    fprintf(fid_txt,[num2str(a(i)),',']);             
end
fprintf(fid_txt,[num2str(a(end))]);
fprintf(fid_txt,'\r\n'); 

fprintf(fid_txt,'[node2]');
fprintf(fid_txt,'\r\n');
fprintf(fid_txt,['b=',num2str(b)]);
fprintf(fid_txt,'\r\n');    
fprintf(fid_txt,'txt write finished!');
fprintf(fid_txt,'\r\n');
fclose(fid_txt);         
disp(['test finish!']);

1.6 写xlsx文件

a=1:100;
b=321;
c=3.1415926;
xlsxname='data.xlsx';
if exist(xlsxname,'file')
    delete(xlsxname); 
end
sheetname='sheet1';
xlswrite(xlsxname,{'a','b','c','xlsx write finished!'},sheetname,'A1');
xlswrite(xlsxname,a',sheetname,'A2');
xlswrite(xlsxname,b,sheetname,'B2');
xlswrite(xlsxname,c,sheetname,'C2');

写dat和hdr,支持ENVI直接打开

% 创建mat矩阵pb
p=ones(640,512);
b=4:4:256;
pb=[];
for i=1:length(b)
    pb(:,:,i)=p*b(i);    
end

pb30=pb(:,:,30);
figure;
imshow(uint8(pb30));

%保存dat
fid_cmati = fopen('pb.dat','w');
fwrite(fid_cmati,pb,'double');
fclose(fid_cmati);          

%保存hdr    
fid_dp=fopen('pb.hdr','a');
fprintf(fid_dp,'ENVI');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'description = {');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'  File Imported into ENVI.}');
fprintf(fid_dp,'\r\n');

fprintf(fid_dp,['samples = ',num2str(size(pb,1))]);
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,['lines = ',num2str(size(pb,2))]);
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,['bands = ',num2str(size(pb,3))]);
fprintf(fid_dp,'\r\n'); 

fprintf(fid_dp,'header offset = 0');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'file type = ENVI Standard');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'data type = 5');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'interleave = bsq');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'sensor type = Unknown');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'byte order = 0');
fprintf(fid_dp,'\r\n');

fprintf(fid_dp,'band names = {');
fprintf(fid_dp,'\r\n');    
fprintf(fid_dp,'band 1');
for ii=2:size(pb,3)
    fprintf(fid_dp,[',band ',num2str(ii)]);        
end
fprintf(fid_dp,'}');
fprintf(fid_dp,'\r\n');

fprintf(fid_dp,'wavelength = {');
fprintf(fid_dp,'\r\n');    
fprintf(fid_dp,num2str(b(1)));
for ii=2:length(b)
    fprintf(fid_dp,[', ',num2str(b(ii))]);        
end
fprintf(fid_dp,'}');
fclose(fid_dp);    

二、自定义函数

2.1 raw文件读取,raw转mat

function mat=raw2mat(allpath,col,row,band,way)
    
%     col=512;
%     row=640*54;
    
    
    fid=fopen(allpath,'r');
    A=fread(fid,[col,row*band],way);
    A=A';
    fclose(fid);
%     figure;
%     imshow(uint8(A(1:640,1:512)));

    mat=[];
    for i=1:band
        mat(:,:,i)=A(row*(i-1)+1:row*i,1:col);   
%         figure;
%         imshow(uint8(B(:,:,i)));
%         title(num2str(i));

    end

end

2.2 .asc文件读取

1-1-505.asc文件内容:
在这里插入图片描述

asc文件中第91行开始为要用的数据。

[wavei,valuei]=textread('1-1-505.asc', '%f %f','headerlines', 90);

2.3 读取xml文件

function doubleDataPt = myreadxml(allpath, NodeName)
% 读取xml文件:读取xml指定节点下的数据,保存成mat
%输入:allpath:xml文件的全路径,包括文件名
%      NodeName:节点名
%输出:doubleDataPt:指定节点中的数据

    xmlDoc = xmlread(allpath);   %读取xml文件。
    doubleDataPt=[];    
    DataPt_array= xmlDoc.getElementsByTagName(NodeName);  % 将所有DataPt节点放入数组DataPt_array
    for i = 0 : DataPt_array.getLength-1    % DataPt_array.getLength
        charDataPt= char(DataPt_array.item(i).getFirstChild.getData);    % 提取当前节点的内容,内容为char型
        doubleDataPt(i+1,1)=str2double(charDataPt);   %将插入型转化为double型
        %fprintf('%d %f \n',i+1,num(i+1));  %输出double型数据
    end

return;

xml文件内容:
在这里插入图片描述
函数调用:

bi = myreadxml('8.5.xml', 'DataPt');

2.4 曲线寻峰函数

function [posi,widthi]=myxunfengLeftRight(sIi)

    [maxv,maxi]=max(sIi);
    minv=min(sIi);
    midv=(maxv+minv)/2;

    %left
    ww_left=abs(sIi(1:maxi)-midv);
    [~,mini_left]=min(ww_left);
    %right
    ww_right=abs(sIi(maxi+1:end)-midv);
    [~,mini_right]=min(ww_right);
    posi=(mini_left+mini_right+maxi)/2;
    widthi=mini_right+maxi-mini_left;

end

2.5 曲线平滑

function xc=myWindowsFilter(x,windowSize,dim)
%x为一维向量
%windowSize为窗口尺寸
%xc为平滑后的一维向量
    
    a = (1/windowSize)*ones(1,windowSize);
    if dim == 1
        b = conv(ones(length(x),1),a,'same');
    else if dim==2
            b = conv(ones(1,length(x)),a,'same');
        end
    end
    y = conv(x,a,'same');
    xc = y./b;
end

2.6 光谱角填图匹配SAM

function angle = mysam(a, b)
% 光谱角填图算法:计算两个一维向量的光谱角相似度
%输入:a,b均为一维向量
%输出:a,b间的光谱角

	% [p,N] = size(a);
	% errRadians = zeros(1,N);
	% for k=1:N
	%     tmp = a(:,k);
	%     errRadians(k) = acos(dot(tmp, b)/ (norm(b) * norm(tmp)));
	% end
		
	xtxi=sum(sum(a.*b));
	x11=sqrt(sum(a.^2));
	xi11=sqrt(sum(b.^2));
	angle=acos(xtxi/x11/xi11);

return;

2.7 批量最小二乘回归,批量计算一次线性拟合的k和b

function [k,b,r2] = LinearRegForArr(x,y,dim)
%最小二乘法一次线性回归函数
%x,y为原始数据
%dim控制按行计算还是按列计算的参数,1为按列计算(1列为1组数据),2为按行计算
%k、b、r2分别为拟合后的k、b、r2的矩阵
	n = size(y,dim);
		
	x2=sum(x.^2,dim);       % 求Σ(xi^2)
	x1=sum(x,dim);          % 求Σ(xi)
	x1y1=sum(x.*y,dim);     % 求Σ(xi*yi)
	y1=sum(y,dim);          % 求Σ(yi)
	 
	k=(n.*x1y1-x1.*y1)./(n.*x2-x1.*x1);      %解出直线斜率b=(y1-a*x1)/n
	b=(y1-k.*x1)./n;                      %解出直线截距
	
	yfit=x.*k+b;	%求拟合值
	sst=sum(((y-mean(y,dim)).^2),dim);
	ssr=sum(((yfit-mean(yfit,dim)).^2),dim);
	r2=ssr./sst;	%求拟合的R2

end

2.8 获取目标文件夹下所有子文件夹的路径

function [SubFolders] = GetFolders(ParentFolder)
%GetFolders
% 函数功能为获取父文件夹下所有子文件夹的路径
% 函数的输入为ParentFolder:父文件夹路径。eg: 'D:\myFiles'
% 函数的输出为SubFolders:子文件夹路径。为一个元胞数组,eg: {'D:\myFiles\file1\doc1'}
  
	SubFolderNames = dir(ParentFolder);
	for i=1:length(SubFolderNames)
	        if( isequal( SubFolderNames( i ).name, '.' )||...
	        isequal( SubFolderNames( i ).name, '..')||...
	        ~SubFolderNames( i ).isdir) % 如果不是目录则跳过
	            continue;
	        end
	        SubFolder(i).SubFolderName = fullfile( ParentFolder, SubFolderNames( i ).name );
	end
	 
	temp = {SubFolder.SubFolderName};
	idx = cellfun(@(x)~isempty(x),temp,'UniformOutput',true); % 利用cellfun函数得到元胞数组中所有非空元素的下标
	SubFolders = temp(idx);
end

2.9 获得目标文件夹下,指定格式所有文件名

function [FileNames] = GetFileNames(Path,Format)
% GetFileNames
% 函数的功能为获得某一路径下,某种格式所有文件名
% 函数的输入1为Path,要获取的路径。eg: 'D:\myFiles\docs'
% 函数的输入2为Format,要获取路径的文件格式。eg: '*.txt','*.docx','*.png'
 
	fileFolder=fullfile(Path);
	dirOutput=dir(fullfile(fileFolder,Format));
	FileNames={dirOutput.name}; 
end

三、绘图

3.1 画热度图

%画热度分布图
figure(1);
set(gcf,'position',[50 50 1200 900]);
colormap jet;
imagesc(a);%矩阵a尺寸为w*h*1
xlim([0 w]);
ylim([0 h]);
set(gca,'XTick',0:floor(w/8):w);
set(gca,'YTick',0:floor(h/8):h);
colorbar;
title('pic');

3.2 在图片上写字

%x,y为文字的位置
%hello为文字的内容
%'horiz','left'  左对齐
%'fontsize',11  字号为11
text(x,y,'hello','horiz','left','fontsize',11);

四、其他

4.1 延时和计时

pause(1);%延时1s

t1=clock;%开始计时
......
......
......
t2=clock;%结束计时
time=etime(t2,t1);%计算时间,单位秒

4.2 小数保留固定位数

c=3.1415926;
d_str=sprintf('%.4f',c);%保留4位小数后的字符串
d=str2num(d_str);%字符串转数字

4.3 矩阵旋转和左右翻转

%矩阵先顺时针转90度
mat1=rot90(mat1);

%矩阵左右翻转
mat2=fliplr(mat1);

4.4 矩阵按指定维度从大到小排序

[max_value9,max_index9]=sort(mat,3,'descend');%mat按第3维度从大到小排序

4.5 矩阵卷积

kenel = 1/25 * ones(5,5);%5*5卷积核
b=conv2(a,kenel,'valid');%对a进行卷积操作      

4.6 矩阵元素统计

statistics1=tabulate(mat);%统计mat中的元素
statistics1(find(statistics1(:,2)==0),:)=[];%去掉没有出现过的元素
statistics1_index=find(statistics1(:,2)>1);%找出现次数大于1的元素的索引
statistics2=statistics1(statistics1_index,:);%统计出现次数大于1的元素

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值