Matlab 常用语法速记 1

===快捷帮助===

查找帮助:doc 函数名

强制终止: ctrl + c

注释: %

清屏 clc,清临时变量窗口 clear

NaN: not a number

inf: infinite

===创建矩阵===

列向量:vecx = [1 2 3 4]; vecy = [1 2 3]\';

矩阵:matA = [11 12 13 14; 21 22 23 24; 31 32 33 34];

下标从“1”开始,matA(2,3) 返回 23;

matA(1,:) 返回第1行向量

matA(2, 1:3)返回第2行的1到3元素构成的向量

matA(2, 2:end)返回第2行的1到最后1个元素构成的向量

==常用函数==

生成(截断的)单位矩阵: eye(3), eye(3,4);

生成[0,1]之间的伪随机数: rand();

生成1:100的随机打乱序列:randIndex = randperm(100);

生成零数组:zeros(2,4)

===矩阵常见操作1===

判断不相等:~

返回矩阵大小: size(A), szie(A, 2)

矩阵乘法 *,逐元素乘 .*

矩阵的逆 inv(matA) 或者 /matA

找出符合条件的元素在矩阵中的位置“数组/向量”: conIndexes = find( matA > 20 && matA < 25); 注意这里返回 conIndexes是 “按列优先”计数的向量;

对这些找出的位置赋值: matA(conIndexes) = 0; matA(conIndexes) = vecx\';

按列优先,将矩阵转化为一个长长的列向量: vecA = matA(:);

按列优先,将一个长长的 列 / 行 向量转化为矩阵:matA = reshape(vecA, 3, 4);

reshape(),矩阵的每列都减去同一个列向量: matRes = matA - reshape(vecy, 1, 3);

bsxfun(),自动拓展 行/列向量 以此和操作的矩阵匹配: matRes = bsxfun(@minus, matA, vecy); @add / rdivide / times / ....

==字符操作==

生成一个字符串的cell数组:cellStr = { \'hello\', \'my\', \'world\'}; 取出字符 str1 = cellStr{1};

字符串拼接: conStr = [ \'you\', \'are\', str1, \'heart\' ];

比较字符串是否相等:strcmp(cellStr{2}, \'mine\') ,相等则返回 1

打印 fprintf(\'%s %s %s: %ith cross\n\', algorithm{alg}, type{tp}, data{k}, i);

replace字符串中的特定字符: strrep(cellStr{2}, \'m\', \'happ\');

数字直接转化为字符:num2str()

fprintf() = sprintf() + disp(),比如:strp = sprintf(\'圆周率 pi = %8.5f \n\', pi); disp(strp); fprintf(\'圆周率 pi = %8.5f \n\', pi);

==文件及路径==

创建路径: fileFolder = [ \'./exp_result/\', algorithms{3}, \'_result/\' ];

如果上面路径不存在,则创建它

if ~exist(fileFolder)

mkdir(fileFolder)

end

移动到指定文件夹: cd(\'./ml_metrics/\'); ...; cd(\'../\');

==其他常用函数==

将指定的字符串变量作为命令来执行: eval( [ cellStr{2}, \'Mat = 1;\'] );

将一些变量保存为指定路径下的 .mat: save( [\'./\', cellStr{1}, \'.mat\'], 字符串变量名1,..., 字符串变量名n,[-append]); 如果已存在该.mat文件,不加-append会将擦除

===流控制语句===

if 条件

xxx;

elseif/else

xxx;

end

for i=1:10

xxx;

end

while i>0

xxx

end

switch 变量

case 常量1

语句序列1;

........

case 常量n

语句序列n;

otherwise

语句序列;

end

==函数定义==

function [retX, retY] = getSomething(inputX, inputY)

xxx;

end

函数调用时真正调用的是函数文件名,而不是文件中函数的名字