matlab编程实践中查找了半天的编程小技巧合集

关于本博文的说明: 本博文主要总结笔者在运用matlab进行编程过程中遇到的语法使用问题及解决方案,记录将采用问答的形式慢慢展开,本博文将根据实际情况不定期更新.

本文所述小技巧,主要来自笔者在运用matlab进行大量数据预处理时所遇问题,及对应的解决方案,可能比较冷门,不会常用。

1. 元胞数组赋值

问:如何构建一个元胞数组(假如特别大),然后对其进行连续赋值呢?

data = cell(1,6)

data =

  1×6 cell 数组

    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}

>> data(1,1:3)={'yes'}

data =

  1×6 cell 数组

    {'yes'}    {'yes'}    {'yes'}    {0×0 double}    {0×0 double}    {0×0 double}

>> data(1,4:6)={ones(3)}

data =

  1×6 cell 数组

    {'yes'}    {'yes'}    {'yes'}    {3×3 double}    {3×3 double}    {3×3 double}

Tips: 赋值的关键在于添加'{}'


2. 打印figure内的图像

问:如何自定义分辨率打印出figure内的高清图像?

matlab figure内的图像可以通过“编辑→复制图窗”进行图像复制,然后粘贴到word或者ppt中,这种方式得到的图像绝大部分情况下的清晰度都非常高,值得使用。偶尔不那么高,或者无法使用此方式复制图窗时,就可以采用此处提供的自定义分辨率打印图像的方法:

print -fhandle -rresolution -dfileformat filename
% print -f1 -r600 -djpeg myfigure;
% 将句柄为1的图像生成myfigure.jpg 文件,分辨率 600 dpi
% 如果要求存为矢量图,可以参数“ -depsc”,其图形可用Adobe Illustrator打开。
% 其他的print命令格式请参考matlab帮助。

Tips: 要明确要打印的图像所在的图窗,并更改-fhandle为-f1或-f2 ...


3. 将字符串转为变量名

问:如何将用户自定义的字符串转换为变量名,实现连续变量定义

使用 eval 函数实现

>> feat_name = {'delta_net_fea','theta_net_fea','alpha_net_fea',...
    'beta_net_fea','gamma_net_fea','all_net_fea',};

 
>> data_name = feat_name{1}

data_name =

    'delta_net_fea'

>> eval([data_name,'=rand(2,2)']);

delta_net_fea =

    0.0424    0.5216
    0.0714    0.0967

Tips: 如果使用此方式创建大量变量时,由于未预先分配内存空间,可能为导致程序执行速度变慢,因此其适用于少量变量的新建.


4. 获取结构体内的变量

问:在结构体内变量个数及变量名不一致的情况下,如何实现对结构体变量的自动获取

主要涉及两个函数 fieldnames 和 getfield 或者或者eval,前者用于获取结构体内的变量名,后两者均可用于从结构体内获取变量

% data  包含多个变量(矩阵)的结构体

data_names = fieldnames(data);  % 获取变量名

for num = 1:1:length(data_names)
    data_name = 'var';
    % eval([data_name,'=data.', data_names{num},';']);
    var = getfield(data,data_names{num});
end

Tips: 使用 eval 函数时,不是变量本身的不用加单引号,是变量本身的均需要添加引号. 函数内应是完整的语句.


5. 连续存储变量

问:如何自动连续存储新的变量,避免相同变量名覆盖的问题

使用 eval 函数实现

% save_data_file_name 为需要保存的变量文件名,可以是用户定义的,或是来自读入的数据文件名
save_data_file_name = filename(1:end-4);
eval(['save ',save_data_file_name, ' data']);  % data为需要保存的变量

 

你可能感兴趣的:(MATLAB,matlab编程,matlab冷门知识点)