关于Matlab编程的思考(待续)

Matlab编程的规范化思考

1.并行化

2.释放内存

3.需要调参的变量太多,可考虑将变量都放到一个结构体里面。

4.find(y),就是要找到y中那些非零项的指引

5.代码运行出现问题的时候,在命令行输入why就可以得到答案

6.输入bench可以给电脑跑分。

7.home 将光标移至命令窗口的左上角

8.查看matlab命令历史记录可找history.m,

 prefdir

 cd 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') == 0
    mkdir (selectedimagefullname)
else
    cd selectedimagefullname
    delete *
    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 on

profile off

然后,在common line中输入profile viewer即可观察到这段程序的效率

这里写图片描述

猜你喜欢

转载自blog.csdn.net/jiandanjinxin/article/details/78353027
今日推荐