Matlab编程的规范化思考
1.并行化
2.释放内存
3.需要调参的变量太多,可考虑将变量都放到一个结构体里面。
4.find(y),就是要找到y中那些非零项的指引
5.代码运行出现问题的时候,在命令行输入why就可以得到答案
6.输入bench可以给电脑跑分。
7.home 将光标移至命令窗口的左上角
8.查看matlab命令历史记录可找history.m,
prefdircd prefdir
%%%%%%%%%%%%%%%%%%%%%
%%%%方法2
history = com.mathworks.mlservices.MLCommandHistoryServices.getSessionHistory;
historyText = char(history);
9,clear all 与 clear的区别
clear all,清除所有的变量,包括全局变量 global。
若是串行的程序,主函数main分别调用子函数 1,2,……,n,
那么任何一个子程序中都不要clear all,因为,主程序在调用子程序之前,应该有了变量定义和赋值,子程序一clear all,那些值就没有了。
若只有一个main函数,分别要做几个运算,一般应该互相独立的,完成一个运算后,clear all;清除所有变量,然后进入下一个运算,变量名也可以重复使用,免得不小心用到前面定义过的变量出问题。
这就说明在定义子函数的时候,不要忘记使用clear all
clear,清除不了全局变量,只能清除普通变量。
10.rng default
恢复matlab启动时默认的全局随机流。在matlab启动时,会用一个默认的随机数生成器产生很多从0到1之间的伪随机数,即全局随机流,任何分布的随机数组都是该全局随机流中的数据。
11.关于双图标题
figure;
imshow(uint8([t1,t2]));
title([‘余弦值为:’,num2str(cos1),’ ‘,’余弦夹角为:’,num2str(v),’°’]);
12.一定要测试运行时间,便于优化代码
13.如何删除workspace中除某个变量之外的所有变量。
who %目前的變量
Your variables are:
a b c K>> clear -regexp [^a]K>> who %目前的變量
Your variables are:
a 第二种方法 clearvars -except a
14 添加当前文件夹及其子文件到路径
currentfold = pwd;
addpath(genpath(currentfold))
15 新建带有时间标志的文件夹来储存文件
savetime = fix(clock);
savetimestr = num2str(savetime);
savetimestr(isspace(savetimestr)) = []; %去除所有空格
selectedimagefullname = ['10foldHandCraft' savetimestr];
% 判断是否存在文件夹
if exist(selectedimagefullname,'dir') == 0mkdir (selectedimagefullname)
elsecd selectedimagefullnamedelete *cd ..
end
%储存文件
save(['.\' selectedimagefullname '\train.mat'],'FTtrain');
save(['.\' selectedimagefullname '\test.mat'],'FTtest');
copyfile('Data*.mat',['.\' selectedimagefullname] )
delete Data*.mat
16.如何查看内存使用情况
feature('memstats')
17.matlab安装新工具包
matlabroot % 进入matlab安装根目录
winopen(ans) % 打开matlab安装根目录
将mathmodl工具箱复制到toolbox中
addpath(genpath('Your_ToolBox_Full_Path'))%注意必须是文件夹路径
savepath或者界面方式
pathtool
点击添加目录及子目录为路径,并保存重启matlab
或者 rehash toolbox
18 mex
mex.getCompilerConfigurations('c','selected')查看mex编辑器选择的语言
19内存预分配可提高matlab运行速度
未进行内存预分配y = 0;
tic;
for i=2:100000;y(i+1) = y(i)+ randn;
end;
toc时间已过 0.031222 秒。进行内存预分配y = zeros(100001,1);
tic;for i=2:100000;y(i+1) = y(i)+ randn;end;
toc时间已过 0.007672 秒。节约时间=(0.031222-0.007672 )/ 0.031222 =75%进行矩阵计算y = zeros(100001,1);
tic;
y= cumsum([0;y]);
toc时间已过 0.000445秒。节约时间=(0.031222-0.000445 )/ 0.031222 =98.6%
20分析matlab程序的主要效率
在需要分析效率的程序段前后加入profile onprofile off然后,在common line中输入profile viewer即可观察到这段程序的效率