MATLAB向量化编程技巧:
-
将向量视为基本单位,对于’. + 运算符’能解决的问题,可以直接解决,这是最简单的一类:输入n个数,输出n个数
%% for n=1:10 n*5 end %% n=1:10; n.*5
-
需要涉及向量间元素的运算,这类问题往往需要借助 MATLAB现成函数来解决,这是较简单的一类:输入n个数,未必输出n个数
%% s=0; for k=1:10 s=1+k; end %% n=1:10; sun(n)
-
需要对向量单个元素进行判断的问题,这种问题中应用的技巧被称为masking,用矩阵切片代替判断
%% s=0; for k=1:10 if mod(k,2)==0; s=s+k; end %% %利用masking判断 n=1:10; n=n(mod(n,2)==0)
-
需要对矩阵元素进行某种函数运算,且该函数支持输入向量,那直接上就行,这是最简单的情况
%% judgement=[]; for k=1:10 judgement=[judgement,isprime(k)]; end %% %若该函数支持输入向量 judgement=[isprime(1:10)];
-
若该函数不支持输入向量(因为该函数的实现环节中有不支持向量的运算),则使用
%% %如果用strs=['1','2','3'],那strs将是字符串'123',而非 字符串组:'1','2','3' strs={'1','2','3'} for k=1:length(strs) length(strs(k)) end %% %利用fun系列函数cellfun来实现该功能 strs={'1','2','3'} cellfun(@length,strs);
fun系列函数:
bsxfun, arrayfun, cellfun, spfun, structfun
对自定义函数,如:f=@(x,y) x2+y2;
arrayfun(f,n)而不能用arrayfun(@f,n),否则无法识别f
对MATLAB现成函数,则带@