最近有事用到了Matlab,顺便学习了一下,本着不浪费的精神,把其中觉得可能用得到的知识点记录一下。比较零散,有机会再整理。
基础知识
- 如果已知函数名,想知道函数用法和功能,直接 help funcName 即可,有详细的介绍及demo。
- 对于多个 *.m 文件共同工作的,只要放在同一个文件夹下,会自动关联,无需像java等其他语言那样显示调用。(系统类库也是会自动加载)
- 数据变量一般保存在 *.mat 文件中,可以方便后续调用或加载,通过这个方法,可以在探索开发阶段节省很多时间,尤其是计算时间较长的。
数据类型
- 数值型:
i = 2;
- 布尔型:
b = true;
- 字符串:
str = 'Hello World';
% 不要使用双引号 - 向量类:
vector = [ 2 3 4];
% vector(2) : 3 - 矩阵类:
matrix = [ 2 3 4 ; 5 6 7];
% matrix(2,2) : 6 - 单元数组型: (cell型与矩阵的最大不同在于其每个元素的 类型可以不同)
方式一:cell_obj = cell(2);
cell_obj{1,1} = 10;
cell_obj{2,2} = 'hello';
方式二:cell_obj = {};
cell_obj{2,2} = 'hello';
类型转换
- 转换为字符串
- 数值-》字符串:
num2str(i);
- 数值-》字符串:
- 转化为cell
- 数值-》Cell:
num2cell(i);
- 字符串-》cell:
cellstr(str); % 这个命名比较特殊
- 数值-》Cell:
自定义数据类型
classdef className % 定义类型名称
properties % 开始属性域
% 属性名称可自己指定,类型不用指定
% 属性默认值为 [],但会根据赋值的类型而自动变化
prop_name_1
prop_name_2
...
prop_name_n
end % 结束属性域
methods % 开始方法定义域
% 声明方法,其中参数列表的第一个参数代表对象本身,即其他语言中的 this 对象;
% 参数变量名和类型可根据语境自行制定(包括self)
% ret 代表要返回的对象
function ret = funcName(self,...,argN)
... your code ...
... your code ...
ret = result_vale;
end
function ret = funcName_1(self,...,argN)
... your code ...
... your code ...
ret = result_vale;
end
end % 结束方法定义域
end % 结束类声明
其他知识点
- 动态扩展矩阵:
对于编码时无法确定矩阵或元组大小的情况,Matlab建议进行预分配内存,而不是在循环体中,不断地通过 obj(index) = obj_item 的方式不断扩展obj的大小。如:
polygonArr = repmat(polygonObj,[1,100]); % 预分配内存多边形数组
polygonArr(1,index)=polygonTmp; % 将多边形存入多边形数组
- 字符串拼接: str_res = strcat(str1,str2,num2str(i),…,strn);
- 计算程序运行时长:
start_time = clock; % 在程序最开始,记录程序开始时间
end_time = clock; % 在程序最后,记录程序结束时间
disp(['共耗时 ',num2str(etime(end_time,start_time)),' 秒']);
- 清空命令行窗口:
clc;
- 清空内存缓存变量:
clear;
- 获取元素尺寸:
size( v , 1 ); % 获取v的第一维的尺寸
- 保存数据到本地:
% 将变量 var_1, ... , var_n 的当前值存储到 store_vars.mat文件中;
% 注意:所有变量名必须用单引号括住;
% 如果store_vars.mat 已存在并有相应变量值存在,则更新其值
% 内存 =》 文件系统
save('store_vars.mat','var_1',...,'var_n');
% 加载 store_vars.mat 文件(加载时需注意,当前工作空间如果存在同名变量,会被覆盖数据)
% 文件系统 =》 内存
load('store_vars.mat');
- 保存数据到Excel
% 将 title_1 的内容,输出到 result.xls 文件的 Sheet_Name 工作表中
% 从 B2 单元格开始填充数据(如果不填第四个参数,则默认从A1 开始)
xlswrite('result.xls',title_1,'Sheet_Name','B2');
- 打印内容到命令行窗口
% disp 将多个文本变量串联输出到命令行,并换行;
% 如果遇到非字符串类型的变量,需要将其转换为字符串;
disp(['打印第',num2str(i),'个字符串:',str]);
% 单个变量字符串时,无需加中括号
disp(mystr);
- 读取图片并二值化
image_obj = imread(file_path); % 读取文件,file_path 为图片路径
% im2bw - Convert image to binary image, based on threshold
% 基于阈值threshold_val转化图片为二值图(1为白色,0为黑色)
% threshold_val 取值 [0,1].
% 灰度值大于 255 * threshold_val 的像素点会被转化为 1,
% 其他的转化为0
BW_obj=im2bw(image_obj,threshold_val); % 图像二值化
% 翻转二值图像颜色( 黑白颠倒 )
BW_reverse = ~BW_obj;