一些常用Matlab代码记录

记忆力差?
用过的代码老忘记?
一次又一次的上网搜?
好浪费时间!
写在博客里方便随时查阅~~~~

常用读写方式

Excel读写(xlsread、xlswrite)

1
2
3
4
5
6
%读
mytxt = xlsread('C:/filename.xls')
%写
txt = ['a' 's' 'd' 'f' 'g' 'h'];
mytxt = xlswrite('C:/filename.xls',txt)

txt读写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
%读
fid = fopen('C:/words.txt','r');
txt = textscan(fid,'%s');
fclose(fid);
%解决中文乱码问题(法一)【TXT文件默认“ANSI”编码,转成“UTF-8”编码】
encoding = 'UTF-8';
currentCharacterEncoding = slCharacterEncoding();
slCharacterEncoding(encoding) %encoding 为设置的具体的编码模式
fid = fopen('C:/words.txt','r');
txt = textscan(fid,'%s');
fclose(fid);
% 缺点:接下来整个程序都按“UTF-8”编码方式运行。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%解决中文乱码问题(法二)【TXT文件默认“ANSI”编码,转成“UTF-8”编码】
fp = fopen('test.txt','r','n','utf-8');
s2 = fgets(fp)
% 优点:仅仅此段程序按“UTF-8”编码方式运行,其他不变。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%写
txt = ['a' 's' 'd' 'f' 'g' 'h'];
dlmwrite('C:/myfile.txt', txt, 'delimiter', '\t')

HTML写入

1
2
3
fid = fopen('MY.html','w+');
fprintf(fid,'%s',HTML{1})
fclose(fid)

图片读写

1
2
3
4
5
%读
I = imread('C:/im01.jpg');
%写
imwrite(I,'C:/im01.jpg');

mat读写

1
2
3
4
5
6
7
%读
Data = load('C:/myfile.mat')%
%写
save DATA %workspace中的内容全部保存
save data.mat -regexp '[^data1 ^data2]' %保存workspace中除data1和data2的内容
%也可在workspace中想要保存的内容右键保存

矩阵随机交换行(列)

1
2
3
4
5
6
7
8
9
% 给矩阵A随机换行
A = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
  h = randperm(size(A, 1)); %randperm生成1:size(A, 1)的随机数
  B = A(h,:)
% 给矩阵A随机换行
A = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
  l = randperm(size(A, 2));
  C = A(:,l)

比较两匹配

1
2
3
A = ['AAA'];
B = ['BBB'];
result = strcmpi(A,B); %结果为1,A、B相同,结果为0,A、B不同

打开文件夹

1
filename = uigetdir('选择一个目录');

超链接

1
web https://tintingo.github.io/ -browser;

弹出对话框

1
msgbox(' 任务完成!')

GUI常用命令

GUI按钮换背景图

1
2
I = importdata('image\eye.jpg');
set(handles.pushbutton1,'CDATA',I);
1
2
3
4
h = handles.figure1;
newIcon = javax.swing.ImageIcon('image\logo.jpg');
figFrame = get(h,'JavaFrame');
figFrame.setFigureIcon(newIcon);

GUI更设置面背景

1
2
3
4
5
6
Hd_axes = axes('units','normalized','position',[0 0 1 1],'tag','Hd_axes');
uistack(Hd_axes,'down')
II = imread('image\background.jpg');
image(II)
colormap gray
set(Hd_axes,'handlevisibility','off','visible','off');

GUI可编辑文本框显示文字

1
set(handles.edit1, 'String','文字')

GUI获取可编辑文本框里的文字

1
txt = get(handles.edit1,'string');

GUI可编辑文本框显示时间

1
2
3
function timercallback(obj, event,handles)
str = datestr(now, 'HH:MM:SS');
set(handles.edit1, 'String',str);

GUI打包成exe

1
deploytool

GUI显示动图图

1
2
3
4
5
6
7
8
9
10
axes(handles.axes1);
theta=linspace(0,110*pi,100);
x=cos(theta);y=sin(theta);
h=line(x,y);
axis([-0.1 5 -0.2 0.2])
set(h,'erasemode','xor')
for n=1:60
set(h,'xdata',x+n*.1);
pause(0.05)
end

GUI弹出式菜单操作

1
2
3
先双击修改“String”为被选择项名词,
get(handles.popupmenu1, 'value');
返回1、2、3为对用选项值。

画网络结构图自定义节点名

1
2
labels = {'one','two','three','four'};
draw_graph(dag,labels);

画网络结构图的两种方式

1
2
draw_graph( dag ); %dag为网络结构边的关系
h = view(biograph( dag ));

matlab关联.m文件(安装了matlab,但无法双击打开.m文件)

法一

1
2
3
4
cwd=pwd;
cd([matlabroot '\toolbox\matlab\winfun\private']);
fileassoc('add',{'.m','.mat','.fig','.p','.mdl',['.' mexext]});
cd(cwd);

法二

1
2
3
4
5
6
步骤1:
到本站下载页下载标题为“matlab关联.m文件”的文件
步骤2:
(1)解压后,运行matlab软件 -> 打开 -> associateFiles.m -> F5运行
(2)运行完毕后文件夹中会生成一个.reg文件,双击该文件,完成即可
(3)找一个.m文件,右键 -> 打开方式,若有matlab选项,说明关联成功

生成‘ABCDE’这5个字母的随机组合

1
s = perms('ABCDE'); %随机生成Cnn种组合

同一figure显示多个图

1
subplot(n,m,i) %一个figure分为n行,m列。i表示第i个图。

22.给一个数列(矩阵)里的数排序(从大到小)

1
2
3
[a b]=sort(A(:)); %从小到大排序
a = fliplr(a'); %取倒序
b = fliplr(b');

字符匹配

判断两字符是否匹配

1
2
3
4
5
6
7
8
9
10
11
>> regexpi('asdf','asdf')
ans =
1
>> regexpi('asdf','agsdf')
ans =
[]

判断字符Str中是否含有‘http’字符

1
2
3
4
5
6
7
8
9
10
11
>> Str='httpthestartingindicesoft';strfind(Str,'http')
ans =
1
>> Str='httpthestartingindicesofthttp';strfind(Str,'http')
ans =
1 26

消除matlAB启动时的Warning:Name is nonexistent or not a directory…

1
2
步骤:
file -> set path -> Defualt -> Yes -> 重启matlab

删除cell中的空元素

1
A(cellfun(@isempty,A)) = [];

matlab添加工具箱

1
2
3
4
5
6
7
步骤1:
将工具箱文件夹放到matlab安装目录下的toolbox下;
步骤2:
addpath(genpath('C:\MATLAB\toolbox\BNT'));
savepath;
步骤3:
which test_BNT.m %test_BNT.m为工具箱任意中的一个函数,若返回路径,则添加成功

matlab批量读取文件夹中的文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for j = 1:215 # 文件夹个数
for i = 1:300 # 每个文件夹中文本个数
eval(['fid = fopen','(','''','G:/DMAIL/2006年TREC公共垃圾邮件语料库(中文)/trec06c/data/',int2str(j),'/',int2str(i),'''',',','''','r','''',')',';'])
%fid = fopen('G:/DMAIL/2006年TREC公共垃圾邮件语料库(中文)/trec06c/data/000/000','r');
txt = textscan(fid,'%s');
fclose(fid);
TREC06cWords01 = char((cellstr(txt{1,1}))');
TREC06cWords02 = [];
for ii = 1:size(TREC06cWords01,1)
TREC06cWords02 = strcat(TREC06cWords02,TREC06cWords01(ii,:));
end
TREC06cWords{j,i} = TREC06cWords02;
end
end

横坐标等间距画条形图(实际值不等距画成不等间)

1
2
3
4
5
6
7
x=[100;200;300;400;500];% 先将横坐标设为等距
y1=[6.1;6.4;7.0;7.2;7.5];
y2=[6.8;7.2;7.4;7.7;7.8];
y3=[4.5;5.1;5.3;5.7;5.9];
y=[y1,y2,y3];
bar(x,y); %画条形图
set(gca,'XTickLabel',{'500','1000','3000','5000','8000'}); % 将横坐标修改为实际值

新建任意格式的文件(以.doc文件为例)

1
2
3
4
5
6
txt = ‘文件名’;
txtname = [txt,'.txt'];
docname = [txt,'.doc'];
fp = fopen(txtname,'w');
fclose(fp);
eval(['!rename' , ' ' ,txtname, ',',docname]);

找一个矩阵是否在另一个矩阵中出现(找到行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
B = magic(10);
A = B(3:4, 4:7); % 测试数据
sA = size(A);
sB = size(B);
k = 0;
C = [];
for i = 1:sB(1)-sA(1)+1
for j = 1:sB(2)-sA(2)+1
if isequal(A, B(i:i+sA(1)-1, j:j+sA(2)-1))
k = k+1;
C(k,1:2) = [i j];
end
end
end

找一个矩阵是否在另一个矩阵中出现(找到列)

1
2
3
A = [1,2,3,1;2,3,4,2;3,3,8,3];
B = [1;2;3];
C = find((ismember(A',B','rows'))')

判断某路径下某文件是否存在

1
~exist('C:\TEST\test.m','file') %为0表示路径C:\TEST下文件test.m存在,为1则无。

Solve函数求解多输入等式解,获取解的值(X = [1 2 3 4 5];Y = [5 4 3 2 1];求等式:X(i)*w=Y(i)的w值)

1
2
3
4
for i=1:size(input,2)
eval(['W(i) = solve(','''',num2str(X(i)),'*w=',num2str(Y(i)),'''',',','''','w','''',');'])
end
W = double(W);

对数列排序时,出现相同大小的数,如何获取让排序位置不重复

1
2
3
4
a = [1 2 8 5 6 4 3 4 2 5 1 9];
b = a+rand(1,size(a,2))*0.001;% 将数列统一加上一个极小的随机数
c = sort(b,'descend');
index = arrayfun(@(x) find(b(x)==c),1:numel(b),'un',0);

GUIDE最大最小化


#进度条

1
2
3
4
5
6
Num = 10000; % 待处理问题个数
h = waitbar(0,'正在运行,请等待...');
for k = 1:Num
waitbar(k/Num)
end
close(h)

Gibbs抽样推理引擎使用

直接使用bnt贝叶斯工具箱中的Gibbs抽样推理引擎@gibbs_sampling_inf_engine时会提示:compute_posterior函数未定义,因为工具箱中确实没用compute_posterior.m文件,有的是compute_posterior.c文件,故在使用前需做一下工作:
进入@gibbs_sampling_inf_engine\private文件夹中找到compute_posterior.c和compute_posterior.c这两个.c文件,将文件复制到主函数同一目录下,并运行如下两段代码:

1
2
mex compute_posterior.c
mex sample_single_discrete.c

编译完成后,将会生成compute_posterior.mexw64和sample_single_discrete.mexw64这两个文件,接下来再次运行主程序就不会提示错误啦!

© 2018 TinTin All Rights Reserved. 本站访客数人次 本站总访问量
主题: hiero