本文作者Falccm,已授权优快云转载 。 责编:王艺
投稿请联系:wangyi@youkuaiyun.com
从事AI领域的您一定是MATLAB的老朋友了,本文列举了在使用MATLAB过程中一些隐藏的有趣技巧,希望对您有所帮助。
注:以下所有例子如无特殊说明都是在 2016a 上执行,其他版本或有差异,建议自行测试
1. 可以用 sprintfc 生成 cellstr:
>> a = magic(3);
>> b = sprintfc('%d',a)
b =
'8' '1' '6'
'3' '5' '7'
'4' '9' '2'
2. strfind 可以作用于数值数组用于查找子串的位置:
>> k = strfind([2 7 1 3 0 7 1],[7 1])
k =
2 6
3. 可以用 cell 和 函数句柄实现类似于函数式编程的操作,以 fibonacci 数列为例:
>> f = {@(f,n)1 @(f,n)f{(n>3)+1}(f,n-1) + f{(n>4)+1}(f,n-2)};
>> fib = @(n)f{(n>2)+1}(f,n);
>> fib(20)
ans =
6765
类似的,构建 if 函数:
>> iff = @(varargin)varargin{find([varargin{1:2:end}],1)*2};
>> x = 3;
>> iff(x<1,1,x<2,2,x<3,3,x<4,4,x<5,5)
ans =
4
4. regexprep 当替换字符串为 ${cmd} 动态表达式时 cmd 可以访问调用时的 caller 工作区:
% haha.m
function x = haha
x = str2double(regexprep('1','1','${num2str(y,16)}'));
% command window/命令窗口
>> y = pi;
>> haha % 注意此处调用 haha 函数时并未传入 y 的值
ans =
3.14159265358979
5. 在 2015b 或 2016a 可以启用被隐藏的单一维度拓展:
>> builtin('_useSingletonExpansion',1);
>> (1:3)'+(1:3) % 相当于 bsxfun(@plus, (1:3)', 1:3)
ans =
2 3 4
3 4 5
4 5 6
>> (1:3